C语言最小二乘法

C语言最小二乘法

ID:38175742

大小:31.00 KB

页数:5页

时间:2019-05-24

C语言最小二乘法_第1页
C语言最小二乘法_第2页
C语言最小二乘法_第3页
C语言最小二乘法_第4页
C语言最小二乘法_第5页
资源描述:

《C语言最小二乘法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、函数逼近与曲线拟合,用最小二乘法进行曲线拟合的C或C++编写的完整程序!已知x0510152025303540455055y01.272.162.863.443.874.154.374.514.584.024.64近似解析表达式为y=at+bt^2+ct^3求a,b,c曲线拟合:#include#include#include#includeSmooth(double*x,double*y,double*a,intn,intm,double*dt1,doubl

2、e*dt2,double*dt3);voidmain(){inti,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("内存分配失败");exit(0);}y=(double*)calloc(n,sizeof(double));if(y==NULL){printf("内存分配失败");exit

3、(0);}a=(double*)calloc(n,sizeof(double));if(a==NULL){printf("内存分配失败");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]点对应的

4、y值是拟合已知值*/Smooth(x,y,a,n,m,&dt1,&dt2,&dt3);/*调用拟合函数*/for(i=1;i<=m;i++)printf("a[%d]=%.10f",(i-1),a[i-1]);printf("拟合多项式与数据点偏差的平方和为:");printf("%.10e",dt1);printf("拟合多项式与数据点偏差的绝对值之和为:");printf("%.10e",dt2);printf("拟合多项式与数据点偏差的绝对值最大值为:");printf("%.10e",dt3);f

5、ree(x);/*释放存储空间*/free(y);/*释放存储空间*/free(a);/*释放存储空间*/}Smooth(double*x,double*y,double*a,intn,intm,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个系

6、数*///intn;/*整型变量,输入参数,给定数据点的个数*///intm;/*整型变量,输入参数,拟合多项式的项数*///double*dt1;/*实型变量,输出参数,拟合多项式与数据点偏差的平方和*///double*dt2;/*实型变量,输出参数,拟合多项式与数据点偏差的绝对值之和*///double*dt3;/*实型变量,输出参数,拟合多项式与数据点偏差的绝对值最大值*/{inti,j,k;double*s,*t,*b,z,d1,p,c,d2,g,q,dt;/*分别为s,t,b分配存贮空间*/s=(double*)call

7、oc(n,sizeof(double));if(s==NULL){printf("内存分配失败");exit(0);}t=(double*)calloc(n,sizeof(double));if(t==NULL){printf("内存分配失败");exit(0);}b=(double*)calloc(n,sizeof(double));if(b==NULL){printf("内存分配失败");exit(0);}z=0;for(i=1;i<=n;i++)z=z+x[i-1]/n;/*z为各个x的平均值*/b[0]=1;d1

8、=n;p=0;c=0;for(i=1;i<=n;i++){p=p+x[i-1]-z;c=c+y[i-1];}c=c/d1;p=p/d1;a[0]=c*b[0];if(m>1){t[1]=1;t[0]=-p;d2=0;c=0;g=0;f

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。