您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 求职简历 > 最小二乘法-曲线拟合—C语言程序
最小二乘法-曲线拟合C语言程序,,经测试正确#includestdio.h#includemath.h#includeconio.hfloatcf(inti,floatf){floatg=1.0;while(i--)g*=f;returng;}voidColPivot(floata[99][99],intn,floatb[99][1],floatx[99]){floatmax,m,temp;intk,q=0,i,j,I;for(k=0;kn&&q==0;k++){max=a[k][k];for(i=k+1;in;i++)if(fabs(max)fabs(a[i][k])){max=a[i][k];I=i;}if(max==0)q=1;else{if(I!=k){temp=b[I][0];b[I][0]=b[k][0];b[k][0]=temp;for(j=k;jn;j++){temp=a[I][j];a[I][j]=a[k][j];a[k][j]=temp;}}for(i=k+1;in;i++){m=a[i][k]/a[k][k];b[i][0]=b[i][0]-b[k][0]*m;for(j=0;jn;j++)a[i][j]=a[i][j]-a[k][j]*m;}}}for(i=n-1;i=0;i--){for(j=n-1;j=i+1;j--)b[i][0]=b[i][0]-a[i][j]*x[j];x[i]=b[i][0]/a[i][i];}}voidmain(){floatx[99],y[99],z[99],s[99][99],t[99][1];intn,m,i,j,k;printf(n=);scanf(%d,&n);printf(m=);scanf(%d,&m);printf(y[%]=,n);for(i=0;in;i++)scanf(%f,&y[i]);printf(z[%d]=,n);for(i=0;in;i++)scanf(%f,&z[i]);for(i=0;i=m;i++){for(j=0;j=m;j++){s[i][j]=0.0;for(k=0;k=n-1;k++)s[i][j]+=cf(i+j,y[k]);}t[i][0]=0.0;for(j=0;j=n-1;j++)t[i][0]+=z[j]*cf(i,y[j]);}for(i=0;i=m;i++)s[i][m+1]=t[i][0];for(i=0;i=m;i++){for(j=0;j=m+1;j++)printf(%f\t,s[i][j]);printf(\n);}ColPivot(s,m+1,t,x);printf(\n\n);for(i=0;i=m;i++)printf(\na[%d]=%f,i,x[i]);printf(\n\n);}
本文标题:最小二乘法-曲线拟合—C语言程序
链接地址:https://www.777doc.com/doc-1882915 .html