最小二乘法程序

上传人:mg****85 文档编号:34040376 上传时间:2018-02-20 格式:DOC 页数:12 大小:64.50KB
返回 下载 相关 举报
最小二乘法程序_第1页
第1页 / 共12页
最小二乘法程序_第2页
第2页 / 共12页
最小二乘法程序_第3页
第3页 / 共12页
最小二乘法程序_第4页
第4页 / 共12页
最小二乘法程序_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《最小二乘法程序》由会员分享,可在线阅读,更多相关《最小二乘法程序(12页珍藏版)》请在金锄头文库上搜索。

1、最小二乘法程序#include #include #include #include #define N 5/N 个点#define T 3 /T 次拟合#define W 1/权函数#define PRECISION 0.00001float pow_n(float a,int n)int i;if(n=0)return(1);float res=a;for(i=1;i=0;i-)temp=arguin;for(j=n-1;ji;j-)temp-=arguij*rootj;rooti=temp/arguii;void get_y(float trans_AN,float x_y2,float

2、 y,int n)int i,j;float temp;for(i=0;i2007-4-19 19:23:57一级(初级)user11004038987254780101526752jiangxc200402007-4-19 19:26:11一级(初级)user11004039040654780101526752jiangxc20040void main ()int num,i;float x,y,l,m,n,p,a,b;i=1;l=0.0;m=0.0;n=0.0;p=0.0;printf (请输入你想计算的 x,y 的个数:);scanf(%d,if (num=1)while (i#incl

3、ude /矩阵结构体struct Matrixint m,n;/m 为行数,n 为列数double *pm;/指向矩阵二维数组的指针;/初始化矩阵 mt,并置矩阵的行为 m,列为 nvoid InitMatrix(struct Matrix *mt,int m,int n)int i;/指定矩阵的行和列mt-m=m;mt-n=n;/为矩阵分配内存mt-pm=new double *m;for(i=0;ipmi=new doublen;/用 0 初始化矩阵 mt,并置矩阵的行为 m,列为 nvoid InitMatrix0(struct Matrix *mt,int m,int n)int i,

4、j;InitMatrix(mt,m,n);for(i=0;ipmij=0.0;/销毁矩阵 mtvoid DestroyMatrix(struct Matrix *mt)int i;/释放矩阵内存for(i=0;im;i+)delete mt-pmi;delete mt-pm;/矩阵相乘 mt3=mt1*mt2/成功返回 1,失败返回 0int MatrixMul(Matrix *mt1,Matrix *mt2,Matrix *mt3)int i,j,k;double s;/检查行列号是否匹配if(mt1-n!=mt2-m|mt1-m!=mt3-m|mt2-n!=mt3-n) return 0;

5、for(i=0;im;i+)for(j=0;jn;j+)s=0.0;for(k=0;kn;k+) s=s+mt1-pmik*mt2-pmkj;mt3-pmij=s;return 1;/矩阵转置 mt2=T(mt1)/成功返回 1,失败返回 0int MatrixTran(Matrix *mt1,Matrix *mt2)int i,j;/检查行列号是否匹配if(mt1-m!=mt2-n|mt1-n!=mt2-m) return 0;for(i=0;im;i+)for(j=0;jn;j+) mt2-pmji=mt1-pmij;return 1;/控制台显示矩阵 mtvoid ConsoleShow

6、Matrix(Matrix *mt)int i,j;for(i=0;im;i+)printf(n);for(j=0;jn;j+) printf(%2.4f ,mt-pmij);printf(n);/Guass 列主元素消元法求解方程 Ax=b,a=(A,b)int Guassl(double *a,double *x,int n) int i,j,k,numl,*h,t;double *l,max;l=new doublen;h=new intn;for(i=0;imax)numl=hj;max=fabs(ahji-1);if(maxi-1)t=hi;hi=hnuml;hnuml=t;for(

7、j=i;j=0;i-)xi=ahin;for(j=i+1;jn;j+) xi=xi-ahij*xj;xi=xi/ahii;/清除临时数组内存delete l;delete h;return 1;/最小二乘法求解矩阵 Ax=bint MinMul(Matrix A,Matrix b,double *x)int i,j;if(b.n!=1) return 0;if(A.m!=b.m) return 0;Matrix TranA;/定义 A 的转置InitMatrix0(MatrixTran(Matrix TranA_A;/定义 A 的转置与 A 的乘积矩阵InitMatrix0(MatrixMul

8、(/A 的转置与 A 的乘积Matrix TranA_b;/定义 A 的转置与 b 的乘积矩阵InitMatrix0(MatrixMul(/A 的转置与 b 的乘积DestroyMatrix(/释放 A 的转置的内存Matrix TranA_A_b;/定义增广矩阵InitMatrix0(/增广矩阵赋值for(i=0;iTranA_A_b.m;i+)for(j=0;jTranA_A_b.m;j+) TranA_A_b.pmij=TranA_A.pmij;TranA_A_b.pmiTranA_A_b.m=TranA_b.pmi0;DestroyMatrix(DestroyMatrix(/Guass 列主消元法求解Guassl(TranA_A_b.pm,x,TranA_A_b.m);DestroyMatrix(return 1;int MinMul(double *A,double *b,int m,int n,double *x)int r,i;Matrix Al,bl;Al.pm=new double *m;Al.m=m;Al.n=n;InitMatrix(for(i=0;im;i+)Al.pmi=Ai; bl.pmi0=bi;r=MinMul(Al,bl,x);delete Al.pm;DestroyMatrix(return r;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号