资源描述:
《最小二乘法-(C语言).doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、#include#include////////////////////////////////////////////////////////////////////////////////////////////矩阵结构体structMatrix{ intm,n;//m为行数,n为列数 double**pm;//指向矩阵二维数组的指针};//初始化矩阵mt,并置矩阵的行为m,列为nvoidInitMatrix(structMatrix*mt,intm,intn){
2、inti; //指定矩阵的行和列 mt->m=m; mt->n=n; //为矩阵分配内存 mt->pm=newdouble*[m]; for(i=0;ipm[i]=newdouble[n]; }}//用0初始化矩阵mt,并置矩阵的行为m,列为nvoidInitMatrix0(structMatrix*mt,intm,intn){ inti,j; InitMatrix(mt,m,n); for(i=0;ipm[i]
3、[j]=0.0;}//销毁矩阵mtvoidDestroyMatrix(structMatrix*mt){ inti; //释放矩阵内存 for(i=0;im;i++) { delete[]mt->pm[i]; } delete[]mt->pm;}//矩阵相乘mt3=mt1*mt2//成功返回1,失败返回0intMatrixMul(Matrix*mt1,Matrix*mt2,Matrix*mt3){ inti,j,k; doubles; //检查行列号是否匹配 if(mt1->n!=mt2->
4、m
5、
6、mt1->m!=mt3->m
7、
8、mt2->n!=mt3->n)return0; for(i=0;im;i++) for(j=0;jn;j++) { s=0.0; for(k=0;kn;k++)s=s+mt1->pm[i][k]*mt2->pm[k][j]; mt3->pm[i][j]=s; } return1;}//矩阵转置mt2=T(mt1)//成功返回1,失败返回0intMatrixTran(Matrix*mt1,Matr
9、ix*mt2){ inti,j; //检查行列号是否匹配 if(mt1->m!=mt2->n
10、
11、mt1->n!=mt2->m)return0; for(i=0;im;i++) for(j=0;jn;j++)mt2->pm[j][i]=mt1->pm[i][j]; return1;}//控制台显示矩阵mtvoidConsoleShowMatrix(Matrix*mt){ inti,j; for(i=0;im;i++) { printf(""); for(j=0
12、;jn;j++)printf("%2.4f",mt->pm[i][j]); } printf("");}////////////////////////////////////////////////////////////////////////////////////////////Guass列主元素消元法求解方程Ax=b,a=(A,b)intGuassl(double**a,double*x,intn){ inti,j,k,numl,*h,t; double*l,max; l=n
13、ewdouble[n]; h=newint[n]; for(i=0;imax) { numl=h[j]; max=fabs(a[h[j]][i-1]); } } if(max<0.00000000001)return0;
14、 //交换行号 if(numl>i-1) { t=h[i]; h[i]=h[numl]; h[numl]=t; } for(j=i;j=0