^
#include<>
#include<>
void nihe();
void gs();
void main()
{
int i,j,m,n;
float o[50];
\
float x[50] , y[50] ,a[50][50];
printf("输入数据节点数 n = ",n);
scanf("%d",&n);
for( i=1;i<=n;i++)
{
printf(" i = %d\n",i);
}
printf("各节点的数据 x[i] \n");
、
for(i=1;i<=n;i++)
{
printf("x[%d] = ",i);
scanf("%f",&x[i]);
}
printf("各节点的数据 y[i] \n");
for(i=1;i<=n;i++)
{
¥
printf("y[%d] = ",i);
scanf("%f",&y[i]);
}
printf("\n");
printf("拟合的多项式次数 m = ", m);
scanf("%d",&m);
¥
}
void nihe(float x[50], float y[50], int m ,int n) {
int i,j,k=0,c=1,w=1;
float f,a[50][50] , o[50];;
~
do
{
f=0;
for(i=1;i<=n;i++)
{
f=f+pow( x[i] , k)*pow( x[i] , k);
}
…
a[c][c]=f ;
a[c+1][c-1]=f;
a[c-1][c+1]=f;
c++;
k++;
}while(k<=m);
,
k=1;c=1;
do
{
f=0;
for(i=1;i<=n;i++)
{
f=f+pow( x[i] , k);
}
*
a[c+1][c]=f;
a[c][c+1]=f;
c++;
k++;
k++;
}while(k<=m+1);
)
k=0;c=1;
do
{
f=0;
for(i=1;i<=n;i++)
{
f=f+y[i]*pow( x[i] , k);
,
}
k++;
a[c][m+2]=f;
c++;
}while(k<=m);
for(i=1;i<=m+1;i++)
{
。
for(j=1;j<=m+2;j++)
{
printf("%f\t",a[i][j]);
}
printf("\n");
}
,
printf("------------------------------------------------------------------------\n");
}
void gs(float a[50][50], float o[50], int m)
{
int i,j,c=1,z=1,t=1,w=1,n;
float l,max,p,q;
-
n=m+1;
do
{
max=a[z][t];
for(i=z+1,j=t;i<=n;i++)
{
{
if(fabs(a[i][j])>fabs(max))
{
max=a[i][j];
w=i;
}
else
{
~
w=z;
}
}
if(c<=n-1)
{for(i=z,j=t;j<=n+1;j++)
{
q=a[i][j];
a[i][j]=a[w][j] ;
)
a[w][j]=q;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n+1;j++)
{
printf("%f\t",a[i][j]);
-
}
printf("\n");
}
printf("------------------------------------------------------------------------\n");
for(i=z,w=t;i<=n;i++)
{
l=a[i+1][w]/a[w][w];
(
for(j=1;j<=n+1;j++)
{
a[i+1][j]=a[i+1][j]-l*a[w][j];
}
}
z++;
t++;
c++;
-
}while(c<=n);
if(a[n][n]==0)
{
printf("矩阵奇异\n");
return;
}
else
{
i=n;
o[i]=(a[i][n+1]/a[i][i]);
for(i=n-1;i>=1;i--)
{
p=0;
for(j=i;j { p=p+a[i][j+1]*o[j+1]; } o[i]=(a[i][n+1]-p)/a[i][i]; } } for(i=1;i<=m+1;i++) { printf("o[%d]=%f\n",i,o[i]); } }