c++关于矩阵的计算题Word文档格式.docx

上传人:b****4 文档编号:7913171 上传时间:2023-05-09 格式:DOCX 页数:16 大小:17.98KB
下载 相关 举报
c++关于矩阵的计算题Word文档格式.docx_第1页
第1页 / 共16页
c++关于矩阵的计算题Word文档格式.docx_第2页
第2页 / 共16页
c++关于矩阵的计算题Word文档格式.docx_第3页
第3页 / 共16页
c++关于矩阵的计算题Word文档格式.docx_第4页
第4页 / 共16页
c++关于矩阵的计算题Word文档格式.docx_第5页
第5页 / 共16页
c++关于矩阵的计算题Word文档格式.docx_第6页
第6页 / 共16页
c++关于矩阵的计算题Word文档格式.docx_第7页
第7页 / 共16页
c++关于矩阵的计算题Word文档格式.docx_第8页
第8页 / 共16页
c++关于矩阵的计算题Word文档格式.docx_第9页
第9页 / 共16页
c++关于矩阵的计算题Word文档格式.docx_第10页
第10页 / 共16页
c++关于矩阵的计算题Word文档格式.docx_第11页
第11页 / 共16页
c++关于矩阵的计算题Word文档格式.docx_第12页
第12页 / 共16页
c++关于矩阵的计算题Word文档格式.docx_第13页
第13页 / 共16页
c++关于矩阵的计算题Word文档格式.docx_第14页
第14页 / 共16页
c++关于矩阵的计算题Word文档格式.docx_第15页
第15页 / 共16页
c++关于矩阵的计算题Word文档格式.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

c++关于矩阵的计算题Word文档格式.docx

《c++关于矩阵的计算题Word文档格式.docx》由会员分享,可在线阅读,更多相关《c++关于矩阵的计算题Word文档格式.docx(16页珍藏版)》请在冰点文库上搜索。

c++关于矩阵的计算题Word文档格式.docx

表3比叶重、气孔密度、叶绿素含量与光合速率实测数据

-------------------------------------------------------------------

品种比叶重气孔密度叶绿素含量光合速率模型值相对误差

编号x1x2x3yymr%

12.0212.53.4311.22

21.9910.84.9911.08

31.7810.73.016.37

41.978.84.319.40

51.9410.24.409.84

5因变量y是自变量x的非线性函数,已得到实测数据见表2,假定y可以用x的3次多项式近似表示,即y对x的多项式回归模型为

y=b0+b1x+b2x2+b3x3

请求出模型蚕数b0、b1、b2和b3,计算模型值ym与相对误差r%并填入表2中。

表2实测数据

------------------------------

xyymr%

06.22

15.46

24.70

33.85

42.48

50.70

-------------------------------

6请以SAMPLE记事本程序为基础,复制一个副本来修改,把前面完成的解题程序修改后添加到记事本程序中,使得可以在记事本中通过下拉菜单操作完成全部解题过程。

解答:

#include<

iostream.h>

classMatrix

{

intRowMax,ColMax;

public:

float**Mat;

Matrix(intrm,intcm)//构造函数

RowMax=rm;

ColMax=cm;

Mat=newfloat*[rm];

for(inti=0;

i<

rm;

i++)

Mat[i]=newfloat[cm];

}

~Matrix(){}//析构函数

voidInput()//输入

{

cout<

<

"

请输入矩阵:

\n"

;

RowMax;

for(intj=0;

j<

ColMax;

j++)

cin>

>

Mat[i][j];

intGetRowMax(){returnRowMax;

}//取矩阵的行数

intGetColMax(){returnColMax;

}//取矩阵的列数

voidMatrix:

:

GetRow(constintn)//取矩阵某一行的全部元素

Matrix(:

"

n<

)=\n"

'

\t'

i++)

Mat[n-1][i]<

\n'

MatrixMatrix:

GetCol(constintn)//取矩阵某一列的全部元素

constintrm=RowMax;

constintcm=0;

Matrixmat1(rm,cm);

mat1.Mat[i][0]=Mat[i][n-1];

for(intl=0;

l<

l++)

{

mat1.Mat[l][0]<

returnmat1;

voidPrint()//显示矩阵

Matrix=\n"

Mat[i][j]<

}

Matrixoperator+(Matrix&

m)//矩阵加法;

可直接写Matrixt1(2,2),t2(2,2),t3(2,2);

t3=t1+t2

Matrixt(RowMax,ColMax);

t.Mat[i][j]=Mat[i][j]+m.Mat[i][j];

returnt;

Matrixoperator-(Matrix&

m)//矩阵减法;

t3=t1-t2

t.Mat[i][j]=Mat[i][j]-m.Mat[i][j];

Matrixoperator*(Matrix&

m)//矩阵乘法;

可直接写Matrixt1(2,3),t2(3,2),t3(2,2);

t3=t1*t2

Matrixt(RowMax,m.ColMax);

m.ColMax;

floatsum=0;

for(intk=0;

k<

k++)

sum+=Mat[i][k]*m.Mat[k][j];

t.Mat[i][j]=sum;

MatrixTrans();

//矩阵转置

MatrixInv();

//矩阵求逆

};

Trans()

constintrm=RowMax;

constintcm=ColMax;

Matrixtmat(cm-1,rm);

for(inti=0;

cm-1;

tmat.Mat[i][j]=Mat[j][i];

cout<

Matrix'

=\n"

for(i=0;

tmat.Mat[i][j]<

}returntmat;

Inv()

Matriximat(rm,cm-1);

Matrixmat(rm,cm);

mat.Mat[i][j]=Mat[i][j];

for(intl=0;

mat1.Mat[l][0]=Mat[l][cm-1];

imat.Mat[i][j]=0;

imat.Mat[i][i]=1;

inth,p,q,j,k;

floattemp,temp2;

i++)//i为列

for(k=i;

k++)//k为行

{if(mat.Mat[k][i]!

=0)

h=k;

//h记住每列中从对角线起第一个非零的元素所在行数

k=rm;

//一经发现每列中第一个元素不为零,则改变k值,k=rm了,则跳内出循环,返回到外循环

}//内循环结束

if(k==rm)

您输入的矩阵没有逆!

!

endl;

i=rm;

else

if(h!

=i)//对角线元素为零,就是说在一列中找到的那个第一个非零的元素不在对角线上

for(j=0;

mat.Mat[i][j]=mat.Mat[i][j]+mat.Mat[h][j];

mat1.Mat[i][j]=mat1.Mat[i][j]+mat1.Mat[h][j];

imat.Mat[i][j]=imat.Mat[i][j]+imat.Mat[h][j];

}//则对角线元素不为零了

temp=mat.Mat[i][i];

for(j=0;

mat.Mat[i][j]=mat.Mat[i][j]/temp;

//把对角上的数单位化

mat1.Mat[i][j]=mat1.Mat[i][j]/temp;

imat.Mat[i][j]=imat.Mat[i][j]/temp;

for(p=0;

p<

p++)

if(i!

=p)//此行不用动

temp2=mat.Mat[p][i];

//非对角线元素

for(q=0;

q<

q++)

mat.Mat[p][q]=mat.Mat[p][q]-temp2*mat.Mat[i][q];

mat1.Mat[p][q]=mat1.Mat[p][q]-temp2*mat1.Mat[i][q];

imat.Mat[p][q]=imat.Mat[p][q]-temp2*imat.Mat[i][q];

}//外循环结束

if(k!

=rm)

{

Inverse=\n"

imat.Mat[i][j]<

answer=\n"

for(l=0;

returnimat;

}voidmain()

{intmenu;

1求方程组的解和系数矩阵的逆矩阵\n"

2求各精矿及尾矿的理论产率\n"

3求矛盾线性方程组的相关矩阵和解\n"

4求多元线性回归的相关矩阵和模型参数\n"

5求多项式回归的相关矩阵和模型参数\n"

6退出\n"

请选择功能(1-6):

menu;

switch(menu)

{case1:

Matrixmat1(3,4);

mat1.Input();

mat1.Inv();

break;

case2:

Matrixmat1(4,5);

}

case3:

Matrixmat1(6,5),mat2(4,6),mat3(4,5);

mat2=mat1.Trans();

mat3=mat1*mat2;

mat3.Inv();

case4:

{floatb0,b1,b2,b3;

inti;

floatym[5],r[5];

Matrixmat1(5,5),mat2(4,5),mat3(4,5),mat4(4,4),mat5(4,1),mat7(4,1);

mat3=mat1.Trans();

mat2=mat3*mat1;

for(i=0;

4;

mat5.Mat[i][0]=mat2.Mat[i][4];

mat4=mat2.Inv();

mat7=mat4*mat5;

b0=mat7.Mat[0][0];

b1=mat7.Mat[1][0];

b2=mat7.Mat[2][0];

b3=mat7.Mat[3][0];

回归模型是:

y="

b0<

+"

b1<

*x1+"

b2<

*x2+"

b3<

*x3"

ym[0]=b0+b1*mat1.Mat[0][1]+b2*mat1.Mat[0][2]+b3*mat1.Mat[0][3];

ym[1]=b0+b1*mat1.Mat[1][1]+b2*mat1.Mat[1][2]+b3*mat1.Mat[1][3];

ym[2]=b0+b1*mat1.Mat[2][1]+b2*mat1.Mat[2][2]+b3*mat1.Mat[2][3];

ym[3]=b0+b1*mat1.Mat[3][1]+b2*mat1.Mat[3][2]+b3*mat1.Mat[3][3];

ym[4]=b0+b1*mat1.Mat[4][1]+b2*mat1.Mat[4][2]+b3*mat1.Mat[4][3];

模型值"

5;

ym"

(i+1)<

="

ym[i]<

"

相对误差"

r[i]=(ym[i]-mat5.Mat[i][0])/mat5.Mat[i][0];

r"

r[i]<

回归模型合理"

}break;

case5:

{floatb0,b1,b2,b3;

inti,j;

floatym[6],r[6];

Matrixmat1(6,2),mat3(4,6),mat4(4,4),mat5(4,5),mat6(4,1),mat7(4,1),mat8(6,5);

mat1.Input();

6;

mat8.Mat[i][0]=1;

mat8.Mat[i][1]=mat1.Mat[i][0];

mat8.Mat[i][2]=mat1.Mat[i][0]*mat1.Mat[i][0];

mat8.Mat[i][3]=mat1.Mat[i][0]*mat1.Mat[i][0]*mat1.Mat[i][0];

mat8.Mat[i][4]=mat1.Mat[i][1];

变换后:

for(j=0;

mat8.Mat[i][j]<

mat3=mat8.Trans();

mat5=mat3*mat8;

mat6.Mat[i][0]=mat5.Mat[i][4];

mat4=mat5.Inv();

mat7=mat4*mat6;

b0=mat7.Mat[0][0];

b1=mat7.Mat[1][0];

b2=mat7.Mat[2][0];

b3=mat7.Mat[3][0];

*x+"

ym[0]=b0+b1*mat8.Mat[0][1]+b2*mat8.Mat[0][2]+b3*mat8.Mat[0][3];

ym[1]=b0+b1*mat8.Mat[1][1]+b2*mat8.Mat[1][2]+b3*mat8.Mat[1][3];

ym[2]=b0+b1*mat8.Mat[2][1]+b2*mat8.Mat[2][2]+b3*mat8.Mat[2][3];

ym[3]=b0+b1*mat8.Mat[3][1]+b2*mat8.Mat[3][2]+b3*mat8.Mat[3][3];

ym[4]=b0+b1*mat8.Mat[4][1]+b2*mat8.Mat[4][2]+b3*mat8.Mat[4][3];

ym[5]=b0+b1*mat8.Mat[5][1]+b2*mat8.Mat[5][2]+b3*mat8.Mat[5][3];

r[i]=(ym[i]-mat1.Mat[i][1])/mat1.Mat[i][1];

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2