您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 商业计划书 > C++实现最小二乘法源代码
最小二乘法第1页共4页#includeiostream.h#includeiomanip.h#includestdlib.h#includemath.hvoidPrint(double**a,intm,intn)//输出函数{inti,j;for(i=0;im;i++){for(j=0;jn;j++){coutsetw(12)a[i][j];}coutendl;}}//////////////////////////////////////////////////////////////////////double**jzcj(double**a,intm,intn,double**b,intp,intq)//矩阵乘积{inti,j;double**c;c=newdouble*[m];for(i=0;im;i++)c[i]=newdouble[q];for(i=0;im;i++){for(j=0;jq;j++){c[i][j]=0;for(intx=0;xn;x++){c[i][j]=c[i][j]+a[i][x]*b[x][j];}}}Print(c,m,q);returnc;}///////////////////////////////////////////////double**jzdn(double**a,intm,intn)//矩阵的逆{inti,j,k;doublec,**b,**t;b=newdouble*[m];//动态分配空间for(i=0;im;i++)最小二乘法第2页共4页b[i]=newdouble[m];t=newdouble*[m];//动态分配空间for(i=0;im;i++)t[i]=newdouble[m];/////////////////////////////////////////矩阵求逆/////////////////////////////////合并构成增广矩阵for(i=0;im;i++){for(j=0;jm;j++){b[i][j]=a[i][j];}for(j=m;j2*n;j++){if(i+m==j)b[i][j]=1;elseb[i][j]=0;}}cout___________________________________求逆过程______________________________endl;for(i=0;im;i++)//输出增广矩阵{for(j=0;j2*m;j++)coutsetw(12)b[i][j];coutendl;}cout\n;/////////////////初等行变化求逆for(i=0;im;i++){c=b[i][i];for(j=i;jm*2;j++)b[i][j]/=c;for(j=i+1;jm;j++){c=b[j][i];for(k=i;km*2;k++)b[j][k]=b[j][k]-c*b[i][k];}}for(i=0;im;i++){for(j=0;j2*m;j++)coutsetw(12)b[i][j];coutendl;最小二乘法第3页共4页}cout\n;for(i=m-1;i=0;i--){c=b[i][i];for(j=i-1;j=0;j--){c=b[j][i];for(k=i;km*2;k++)b[j][k]=b[j][k]-c*b[i][k];}}for(i=0;im;i++){for(j=0;j2*m;j++)coutsetw(12)b[i][j];coutendl;}for(i=0;im;i++){for(j=m;jm*2;j++)t[i][j-m]=b[i][j];coutsetw(12)b[i][j];coutendl;}returnt;}//////////////////////////////////////////////double**jzzz(double**a,intm,intn)//矩阵转置{inti,j;double**c;c=newdouble*[n];for(i=0;in;i++)c[i]=newdouble[m];for(j=0;jm;j++)//矩阵的转置{for(intk=0;kn;k++){c[k][j]=a[j][k];}}Print(c,n,m);returnc;}最小二乘法第4页共4页voidmain(){double**a,**b,**d,**e,**f,**g,**h;inti,j,m,n,p,q;cout请输入矩阵a的行和列:\n;cinmn;a=newdouble*[m];for(i=0;im;i++)a[i]=newdouble[m];cout请输入矩阵a的数据:\n;for(i=0;im;i++){for(j=0;jn;j++)cina[i][j];}//完成了对矩阵a的初始赋值cout请输入矩阵b的行和列:\n;cinpq;b=newdouble*[p];for(i=0;ip;i++)b[i]=newdouble[p];cout请输入矩阵b的数据:\n;for(i=0;ip;i++){for(j=0;jq;j++)cinb[i][j];}//完成了对矩阵b的初始赋值cout_________________原始矩阵_______________endl;Print(a,m,n);//输出系数矩阵cout\n;Print(b,p,q);//输出常数矩阵cout系数矩阵a的转置矩阵1\n;d=jzzz(a,m,n);cout系数矩阵a的转置矩阵与系数矩阵a的乘积所得矩阵2\n;e=jzcj(d,n,m,a,m,n);cout系数矩阵a与其转置矩阵的乘积的逆矩阵3\n;f=jzdn(e,n,n);cout矩阵的逆\n;Print(f,n,n);cout系数矩阵a的转置矩阵与常数矩阵b的乘积所得矩阵4\n;g=jzcj(d,n,m,b,p,q);cout最小二乘解x,y\n5;h=jzcj(f,n,n,g,n,q);}
本文标题:C++实现最小二乘法源代码
链接地址:https://www.777doc.com/doc-1278018 .html