C语言最小二乘法.doc_第1页
C语言最小二乘法.doc_第2页
C语言最小二乘法.doc_第3页
C语言最小二乘法.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

函数逼近与曲线拟合,用最小二乘法进行曲线拟合的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+bt2+ct3求a,b,c曲线拟合: #include #include #include #include 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+) xi-1=b+(i-1)*5; /*每隔5取一个点,这样连续取12个点*/ y0=0; y1=1.27; y2=2.16; y3=2.86; y4=3.44; y5=3.87; y6=4.15; y7=4.37; y8=4.51; y9=4.58; y10=4.02; y11=4.64; /*xi-1点对应的y值是拟合已知值*/ Smooth(x,y,a,n,m,&dt1,&dt2,&dt3); /*调用拟合函数*/ for(i=1;i=m;i+) printf(a%d = %.10fn,(i-1),ai-1); printf(拟合多项式与数据点偏差的平方和为:n); printf(%.10en,dt1); printf(拟合多项式与数据点偏差的绝对值之和为:n); printf(%.10en,dt2); printf(拟合多项式与数据点偏差的绝对值最大值为:n); printf(%.10en,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(内存分配失败n); exit (0); b = (double *)calloc(n,sizeof(double); if(b = NULL) printf(内存分配失败n); exit (0); z = 0; for(i=1;i=n;i+) z=z+xi-1/n; /*z为各个x的平均值*/ b0=1; d1=n; p=0; c=0; for(i=1;i1) t1=1; t0=-p; d2=0; c=0; g=0; for(i=1;i=n;i+) q=xi-1-z-p; d2=d2+q*q; c=yi-1*q+c; g=(xi-1-z)*q*q+g; c=c/d2; p=g/d2; q=d2/d1; d1=d2; a1=c*t1; a0=c*t0+a0; for(j=3;j=4) for(k=j-2;k=2;k-) sk-1=-p*tk-1+tk-2-q*bk-1; s0=-p*t0-q*b0; d2=0; c=0; g=0; for(i=1;i=1;k-) q=q*(xi-1-z)+sk-1; d2=d2+q*q; c=yi-1*q+c; g=(xi-1-z)*q*q+g; c=c/d2; p=g/d2; q=d2/d1; d1=d2; aj-1=c*sj-1; tj-1=sj-1; for(k=j-1;k=1;k-) ak-1=c*sk-1+ak-1; bk-1=tk-1; tk-1=sk-1; *dt1=0; *dt2=0; *dt3=0; for(i=1;i=1;k-) q=q*(xi-1-z)+ak-1; d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论