曲线拟合(数值 (C语言))
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(1)曲线拟合:
#include
#include
#define MAX 100
void main()
{ int i,j,k,m,n,N,mi;
float tmp,mx;
float X[MAX][MAX],Y[MAX],x[MAX],y[MAX],a[MAX];
printf("\n 输入拟合多项式的次数:\n");
scanf("%d",&m);
printf("\n 输入给定点的个数n及坐标(x,y):\n");
scanf("%d",&N);
printf("\n");
for(i=0;i scanf("%f,%f",&x[i],&y[i]); for(i=0;i<=m;i++) { for(j=i;j<=m;j++) { tmp=0; for(k=0;k tmp=tmp+pow(x[k],(i+j)); X[i][j]=tmp; X[j][i]=X[i][j]; } } for(i=0;i<=m;i++) { tmp=0; for(k=0;k tmp=tmp+y[k]*pow(x[k],i); Y[i]=tmp; } for(j=0;j { for(i=j+1,mi=j,mx=fabs(X[j][j]);i<=m;i++) if(fabs(X[i][j])>mx) { mi=i; mx=fabs(X[i][j]); } if(j { tmp=Y[j]; Y[j]=Y[mi]; Y[mi]=tmp; for(k=j;k<=m;k++) { tmp=X[j][k]; X[j][k]=X[mi][k]; X[mi][k]=tmp; } } for(i=j+1;i<=m;i++) { tmp=-X[i][j]/X[j][j]; Y[i]+=Y[j]*tmp; for(k=j;k<=m;k++) X[i][k]+=X[j][k]*tmp; } } a[m]=Y[m]/X[m][m]; for(i=m-1;i>=0;i--) { a[i]=Y[i]; for(j=i+1;j<=m;j++) a[i]-=X[i][j]*a[j]; a[i]/=X[i][i]; } printf("\n 所求的二次多项式为:\n"); printf("P(x)=%f",a[0]); for(i=1;i<=m;i++) printf("+(%f)*x^%d",a[i],i); } 输入拟合多项式的次数: 2 输入给定点的个数n及坐标(x,y): 5 1,2 5,3 2,4 8,3 -1,5 所求的二次多项式为: P(x)=3.952280+(-0.506315)*x^1+(0.050877)*x^2Press any key to continue