最小二乘法拟合C语言实现

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

#includemath.h#includestdio.h#includestdlib.h#includemalloc.hfloataverage(intn,float*x){inti;floatav;av=0;for(i=0;in;i++)av+=*(x+i);av=av/n;return(av);}//平方和floatspfh(intn,float*x){inti;floata;a=0;for(i=0;in;i++)a+=(*(x+i))*(*(x+i));return(a);}//和平方floatshpf(intn,float*x){inti;floata,b;a=0;for(i=0;in;i++)a=a+*(x+i);b=a*a/n;return(b);}//两数先相乘,再相加floatdcj(intn,float*x,float*y){inti;floata;a=0;for(i=0;in;i++)a+=(*(x+i))*(*(y+i));return(a);}//两数先相加,再相乘floatdjc(intn,float*x,float*y){inti;floata=0,b=0;for(i=0;in;i++){a=a+*(x+i);b=b+*(y+i);}a=a*b/n;return(a);}//系数afloatxsa(intn,float*x,float*y){floata,b,c,d,e;a=spfh(n,x);b=shpf(n,x);c=dcj(n,x,y);d=djc(n,x,y);e=(c-d)/(a-b);//printf(%f%f%f%f,a,b,c,d);return(e);}floathe(intn,float*y){inti;floata;a=0;for(i=0;in;i++)a=a+*(y+i);return(a);}floatxsb(intn,float*x,float*y,floata){floatb,c,d;b=he(n,y);c=he(n,x);d=(b-a*c)/n;return(d);}voidmain(){intn,i;float*x,*y,a,b;printf(请输入将要输入的有效数值组数n的值);scanf(%d,&n);printf(n=%d\n,n);x=(float*)calloc(n,sizeof(float));if(x==NULL){printf(内存分配失败);exit(1);}y=(float*)calloc(n,sizeof(float));if(y==NULL){printf(内存分配失败);exit(1);}printf(请输入x的值);for(i=0;in;i++)scanf(%f,x+i);printf(请输入y的值,请注意与x的值一一对应);for(i=0;in;i++)scanf(%f,y+i);//x[0]=0.1;x[1]=0.3;x[2]=0.4;x[3]=0.55;x[4]=0.7;x[5]=0.8;x[6]=0.95;//y[0]=15;y[1]=18;y[2]=19;y[3]=21;y[4]=22.6;y[5]=23.8;y[6]=26;for(i=0;in;i++){printf(x[%d]=%5.4f,i,*(x+i));printf(y[%d]=%5.4f\n,i,*(y+i));}a=xsa(n,x,y);b=xsb(n,x,y,a);printf(经最小二乘法拟合得到的一元线性方程为:\n);printf(f(x)=%5.4fx+%5.4f\n,a,b);}

1 / 2
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功