曲线拟合(数值 (C语言))

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档