#include <stdio.h>
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
void main()
{
cout<<"***Least Sqares Polynomial Approximation***\n");
int N=16;
int M=2;
int i,j,k,L;
int X[17]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
double Y[17]={4.00,6.40,8.00,8.80,9.22,9.50,9.70,9.86,10.00,10.20,10.32,10.42,10.50,10.55,10.58,10.60};
double S[5],T[3],A[4][5];
for(j=0;j<16;j++)
cout<<X[j]<<","<<Y[j]<<endl;
for(i=0;i<=2;i++)
{
T[i]=0;
S[i]=0;
for(j=0;j<16;j++)
{
T[i]=T[i]+Y[j]* pow(X[j],i);
S[i]=S[i]+pow(X[j],i);
}
}
for(i=0;i<=M;i++)
{
S[M+i]=0;
for(j=0;j<16;j++)
S[M+i]=S[M+i]+pow(X[j],M+i);
}
for(i=0;i<=M;i++)
{
for(j=0;j<=M;j++)
{
A[i+1][j+1]=S[i+j];
cout<<setw(10*j)<<A[i+1][j+1];
}
A[i+1][M+2]=T[i];
cout<<setw(10*M+12)<<A[i+1][M+2]<<endl;
}
{
for(i=2;i<=M+1;i++)
A[i][1]=A[i][1]/A[1][1];
if(M>=2)
{
for(k=2;k<=M;k++)
{
for(j=k;j<=M+2;j++)
{
for(L=1;L<=k-1;L++)
{
A[k][j]=A[k][j]-A[k][L]*A[L][j];
}
}
for(i=k+1;i<=M+1;i++)
{
A[i][k]=A[k][i]/A[k][k];
}
}
}
for(j=M+1;j<=M+2;j++)
{
for(L=1;L<=M;L++)
{
A[M+1][j]=A[M+1][j]-A[M+1][L]*A[L][j];
}
}
A[M+1][M+2]=A[M+1][M+2]/A[M+1][M+1];
for(i=M;i>=0;i--)
{
for(L=i+1;L<=M+1;L++)
{
A[i][M+2]=A[i][M+2]-A[i][L]*A[L][M+2];
}
A[i][M+2]=A[i][M+2]/A[i][i];
}
}
for(i=0;i<=2;i++)
cout<<"a("<<i<<")="<<A[i+1][M+2]<<endl;
getchar();
}