C++矩阵运算类库很实用.docx

上传人:b****3 文档编号:3442594 上传时间:2022-11-23 格式:DOCX 页数:11 大小:17.21KB
下载 相关 举报
C++矩阵运算类库很实用.docx_第1页
第1页 / 共11页
C++矩阵运算类库很实用.docx_第2页
第2页 / 共11页
C++矩阵运算类库很实用.docx_第3页
第3页 / 共11页
C++矩阵运算类库很实用.docx_第4页
第4页 / 共11页
C++矩阵运算类库很实用.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

C++矩阵运算类库很实用.docx

《C++矩阵运算类库很实用.docx》由会员分享,可在线阅读,更多相关《C++矩阵运算类库很实用.docx(11页珍藏版)》请在冰豆网上搜索。

C++矩阵运算类库很实用.docx

C++矩阵运算类库很实用

C++进行矩阵运算类库

头文件:

Matrix.h

#ifndefMATRIX_H

#defineMATRIX_H

#include"iostream”

#include”string”

#include

#include

#include〈fstream〉

#include〈sstream〉//istringstream必须包含这个头文件

usingnamespacestd;

classMatrix

public:

voidreadMatrix(stringfileName);

voidshowMatrix();

voidwriteMatrix(stringstr);

voidinversion();//求矩阵的逆矩阵

voidchange();//求矩阵的转置

voidoperator+(Matrix&a);//声明重载运算符的“+”函数

voidoperator—(Matrix&a);//声明重载运算符的“-"函数

voidoperator*(Matrix&a);//声明重载运算符的“*”函数

voidoperator=(Matrix&a);//声明重载运算符的“=”赋值函数

vector>_mat;

introw;

intcol;

};

#endif

 

源文件:

main.cpp

#include”iostream”

#include"string"

#include

#include

#include〈fstream>

#include

#include"Matrix.h"

#include〈time.h〉//使用随机数

#include〈cmath〉//数学计算

usingnamespacestd;

//将运算得到的数据存储到box中,形成一个完整的Matrix量

Matrixbox_mul;//矩阵相乘的结果

Matrixbox_inver;//矩阵的逆的结果

Matrixbox_change;//矩阵转置的结果

Matrixbox_plus;//矩阵加的结果

Matrixbox_cut;//矩阵减的结果

voidMatrix:

readMatrix(stringfileName)

{

ifstreamifile(fileName。

c_str(),ios:

:

in);/*声明一个输入句柄,打开fileName所指文件.

接下来就可以通过ifile>>***来读取1.txt中的内容了*/

doubletmp;

stringline;

vector

while(getline(ifile,line))

{

istringstreamistr(line);

while(istr>〉tmp)

row.push_back(tmp);//在row尾部插入读入的数据

this—〉col=row.size();

_mat。

push_back(row);

row.clear();

istr。

clear();

line。

clear();

}

this-〉row=_mat。

size();//这里的row不是vector变量,是matrix中的row

ifile。

close();

}

voidMatrix:

showMatrix()

cout<〈”矩阵:

"〈

//cout〈<"row="〈

//cout〈〈”col=”〈

for(inti=0;i〈row;i++)

for(intj=0;j〈col;j++)

cout〈〈_mat[i][j]〈〈"";

cout〈〈endl;

}

}

voidMatrix:

writeMatrix(stringstr)

ofstreamos(str,ios:

:

trunc);

//ofstreamos(”C:

\\Users\\Administrator\\Desktop\\数据矩阵W.txt”,ios:

trunc);

if(os)

{

for(inti=0;i

{

for(intj=0;j〈col;++j)

os〈〈_mat[i][j]<<””;

os〈〈endl;

}

}

else

cerr<〈”无法打开文件!

"〈〈endl;

voidMatrix:

:

operator+(Matrix&a)

//cout<<"矩阵的和:

”〈

doubleb[200][200];

for(inti=0;i

{

for(intj=0;j

b[i][j]=_mat[i][j]+a。

_mat[i][j];

box_plus.col=col;box_plus。

row=row;//行列数设置好

box_plus。

_mat。

clear();

vector〈double>t;

for(inti=0;i

for(intj=0;j

t。

push_back(b[i][j]);

box_plus._mat.push_back(t);//数据输入_mat量中

t.clear();

}

voidMatrix:

operator-(Matrix&a)

//cout<<"矩阵的差:

”〈

doubleb[200][200];

for(inti=0;i〈row;i++)

{

for(intj=0;j〈col;j++)

b[i][j]=_mat[i][j]-a。

_mat[i][j];

}

box_cut.col=col;box_cut.row=row;//行列数设置好

box_cut._mat.clear();

vector〈double〉t;

for(inti=0;i〈row;i++)

for(intj=0;j

t.push_back(b[i][j]);

}

box_cut._mat。

push_back(t);//数据输入_mat量中

t。

clear();

}

voidMatrix:

operator*(Matrix&a)//可连续使用

{

//cout〈<"矩阵相乘:

"<〈endl;

doubleb[200][200];

for(inti=0;i

for(intj=0;j〈a。

col;j++)

b[i][j]=0;

for(intk=0;k

b[i][j]+=_mat[i][k]*a。

_mat[k][j];

}

box_mul。

col=a.col;

box_mul。

row=row;//行列数设置好

box_mul._mat。

clear();

vector〈double〉t;

for(inti=0;i〈row;i++)

{

for(intj=0;j〈a.col;j++)

t.push_back(b[i][j]);

}

box_mul。

_mat.push_back(t);//数据输入_mat量中

t。

clear();

}

voidMatrix:

operator=(Matrix&a)

row=a。

row;col=a。

col;

_mat.clear();

vector〈double>t;

for(inti=0;i〈row;i++)

{

for(intj=0;j〈col;j++)

{

t.push_back(a._mat[i][j]);

_mat。

push_back(t);

t。

clear();

}

}

voidMatrix:

:

change()//可连续使用

//cout〈〈"矩阵的转置:

"<〈endl;

doubleb[200][200];

for(inti=0;i

{

for(intj=0;j

b[j][i]=_mat[i][j];

}

box_change.col=row;box_change.row=col;//行列数设置好

box_change。

_mat。

clear();

vectort;

for(inti=0;i〈col;i++)

for(intj=0;j〈row;j++)

{

t。

push_back(b[i][j]);

}

box_change._mat.push_back(t);//数据输入_mat量中

t。

clear();

}

}

voidMatrix:

:

inversion()//可连续使用

//cout<〈”矩阵的逆:

”〈〈endl;

inti,j,k,M=this—〉col,N=2*this—>col;

doubleb[200][200];

for(i=0;i〈M;i++)//赋值

{

for(j=0;j〈M;j++)

b[i][j]=_mat[i][j];}

for(i=0;i〈M;i++)//扩展

for(j=M;j〈N;j++)

if(i==(j—M))

b[i][j]=1;

else

b[i][j]=0;

}

for(i=0;i

if(b[i][i]==0)

{

for(k=i;k

{

if(b[k][i]!

=0)

{

for(intj=0;j〈N;j++)

doubletemp;

temp=b[i][j];

b[i][j]=b[k][j];

b[k][j]=temp;

break;

}

if(k==M)

{

cout〈<"该矩阵不可逆!

\n”;

exit(0);

for(j=N-1;j>=i;j——)

b[i][j]/=b[i][i];

for(k=0;k〈M;k++)

{

if(k!

=i)

{

doubletemp=b[k][i];

for(j=0;j

b[k][j]-=temp*b[i][j];

}

}

box_inver。

col=col;box_inver.row=row;//行列数设置好

box_inver._mat.clear();

vector〈double>t;

for(inti=0;i

{

for(intj=M;j〈N;j++)

{

//cout<

t.push_back(b[i][j]);

}

box_inver._mat。

push_back(t);//数据输入_mat量中

t.clear();

}

 

intmain()

///////////////////////////////

system("pause");

return0;

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1