//@ĢU^f[^ÉηéÅŽQæß―Ū
#include<stdio.h>
#include<math.h>
#define M
6
// ÃÞ-Ā É š―ģ
#define N
3
// Āšģž· É žÞ―ģ +1
#define EPSILON 1.0E-5
#define TRUE 1
#define FALSE 0
double data[M][2]={{
0.0, 10.0 },
{ 1.0, 9.05 },
{ 2.0, 8.19 },
{ 3.0, 7.41 },
{ 4.0, 6.70 },
{ 5.0, 6.07 }};
double a[N][N+1];
double c[N];
int sw=TRUE;
void main()
{
void op1();
void
comp_a();
void
solve_eq();
void op2();
op1();
comp_a();
solve_eq();
op2();
}
void op1()
{
int k;
printf("\n\nÖf(x)ĖĢU^f[^ÉηéÅŽQæß―Ūg(x)ðßé\n\n");
printf(" if[^%dA―ŪĖ%dAĖęj\n\n",M,N);
printf("data x
fx\n");
for(k=0;k<M;k++)
printf("
#%2d %f
%f\n",k+1,data[k][0],data[k][1]);
}
void comp_a()
{
int i,j,k;
double
powf(double,int);
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
if(i==0&&j==0)
a[i][j]=M;
else
{
a[i][j]=0.0;
for(k=0;k<M;k++)
a[i][j]=a[i][j]+powf(data[k][0],i+j);
}
}
a[i][N]=0.0;
for(k=0;k<M;k++)
if(i==0)
a[i][N]=a[i][N]+data[k][1];
else
a[i][N]=a[i][N]+powf(data[k][0],i)*data[k][1];
}
printf("\na[i][j]=\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("
%10.6f",a[i][j]);
printf(" %10.6f\n",a[i][N]);
}
}
double powf(double x,int n)
{
int i;
double
y=1.0;
if(n==0)
if(x!=0)
return 1;
else
return 0;
else
{
for(i=0;i<n;i++)
y=y*x;
return
y;
}
}
void solve_eq()
{
int i,j,k,ik;
double
ak,aik,w;
for(k=0;k<N;k++)
{
if(fabs(a[k][k])<=EPSILON)
{
ik=k+1;
while((ik<N) &&
(fabs(a[ik][k])<EPSILON))
ik++;
if(ik<N)
for(j=k;j<N+1;j++)
{
w=a[k][j];
a[k][j]=a[ik][j];
a[ik][j]=w;
}
else
{
sw=FALSE;
return;
}
}
ak=a[k][k];
for(j=k;j<=N;j++)
a[k][j]=a[k][j]/ak;
for(i=0;i<N;i++)
if(i!=k)
{
aik=a[i][k];
for(j=k;j<=N;j++)
a[i][j]=a[i][j]-aik*a[k][j];
}
}
}
void op2()
{
int i;
if(sw==TRUE)
{
printf("\ng(x)=");
for(i=0;i<N-1;i++)
printf("(%f)x^%d
+",a[i][N],i);
printf("(%f)x^%d\n\n",a[N-1][N],N-1);
}
else
printf("Impossible.\n\n");
}