《C语言编写的用最小二乘法进行曲线拟合》.doc

《C语言编写的用最小二乘法进行曲线拟合》.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《C语言编写的用最小二乘法进行曲线拟合》.doc

函数逼近与曲线拟合,用最小二乘法进行曲线拟合的C或C++编写的完整程序! 已知x 0 5 10 15 20 25 30 35 40 45 50 55 y 0 1.27 2.16 2.86 3.44 3.87 4.15 4.37 4.51 4.58 4.02 4.64 近似解析表达式为y=at+bt^2+ct^3求a,b,c 曲线拟合: #include stdio.h #include stdlib.h #include malloc.h #include math.h Smooth(double *x,double *y,double *a,int n,int m,double *dt1,double *dt2,double *dt3); void main() { int i ,n ,m ; double *x,*y,*a,dt1,dt2,dt3,b; n = 12;// 12个样点 m = 4; //3次多项式拟合 b = 0; //x的初值为0 /*分别为x,y,a分配存贮空间*/ x = (double *)calloc(n,sizeof(double)); if(x == NULL) { printf(内存分配失败\n); exit (0); } y = (double *)calloc(n,sizeof(double)); if(y == NULL) { printf(内存分配失败\n); exit (0); } a = (double *)calloc(n,sizeof(double)); if(a == NULL) { printf(内存分配失败\n); exit (0); } for(i=1;i=n;i++) { x[i-1]=b+(i-1)*5; /*每隔5取一个点,这样连续取12个点*/ } y[0]=0; y[1]=1.27; y[2]=2.16; y[3]=2.86; y[4]=3.44; y[5]=3.87; y[6]=4.15; y[7]=4.37; y[8]=4.51; y[9]=4.58; y[10]=4.02; y[11]=4.64; /*x[i-1]点对应的y值是拟合已知值*/ Smooth(x,y,a,n,m,dt1,dt2,dt3); /*调用拟合函数*/ for(i=1;i=m;i++) printf(a[%d] = %.10f\n,(i-1),a[i-1]); printf(拟合多项式与数据点偏差的平方和为:\n); printf(%.10e\n,dt1); printf(拟合多项式与数据点偏差的绝对值之和为:\n); printf(%.10e\n,dt2); printf(拟合多项式与数据点偏差的绝对值最大值为:\n); printf(%.10e\n,dt3); free(x); /*释放存储空间*/ free(y); /*释放存储空间*/ free(a); /*释放存储空间*/ } Smooth(double *x,double *y,double *a,int n,int m,double *dt1,double *dt2,double *dt3)//(x,y,a,n,m,dt1,dt2,dt3 ) //double *x; /*实型一维数组,输入参数,存放节点的xi值*/ //double *y; /*实型一维数组,输入参数,存放节点的yi值*/ //double *a; /*双精度实型一维数组,长度为m。返回m一1次拟合多项式的m个系数*/ //int n; /*整型变量,输入参数,给定数据点的个数*/ //int m; /*整型变量,输入参数,拟合多项式的项数*/ //double *dt1; /*实型变量,输出参数,拟合多项式与数据点偏差的平方和*/ //double *dt2; /*实型变量,输出参数,拟合多项式与数据点偏差的绝对值之和*/ //double *dt3; /*实型变量,输出参数,拟合多项式与数据点偏差的绝对值最大值*/ { int i ,j ,k ; double *s,*t,*b,z,d1,p,c,d2,g,q,dt; /*分别为s ,t ,b分配存贮空间*/ s = (double *)calloc(n,sizeof(double)); if(s == NULL) { printf(内存分配失败\n); exit (0); } t = (double *)calloc(n,sizeof(double)); if(t == NULL) { printf(内存分配失败\

文档评论(0)

ucut + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档