GAUSS'S INTERPOLATION
//program to implement GAUSS'S INTERPOLATION
#include<stdio.h>
#define max 10
int main()
{
float table[max][max],x, n, h, y, p;
int n, mid, i, j;
printf("\n How many values are to be entered? \n");
scanf("%d",&n);
printf("\n Enter the values of x and y in tabular format: \n\n");
for(i=0; i<=2*n-2; i+=2)
for(j=0; j<=1; j++)
scanf("%f",&table[i][j]) ;
printf("\n Find the value of y at x = ? \n");
scanf("%f",&x);
for(i=2; i<=n; i++)
for(j=i-1, n=1; n<=n+1-i; j+=2, n++)
{
table[j][i]=table[j+1][i-1] - table[j-1][i-1];
}
/* Finding the middle of the x column of the table */
if(n%2==1)
mid=n-1;
else
mid=n;
h=table[mid+2][0] - table[mid][0] ;
n=p=(x-table[mid][0])/h;
/* Using interpolation formula */
if(x>table[mid][0])
{
printf("\n APPLYING GAUSS FORWARD CENTRAL DIFFERENCE FORMULA \n");
y=table[mid][1] + n*table[mid+1][2];
for(i=3; i<=n; i++)
if(i%2==1)
{
n*=(p-(int)i/2)/(i-1);
y+=n*table[mid][i];
}
else
{
n*=(p+(int)i/2 -1)/(i-1);
y+=n*table[mid+1][i];
}
}
else
{
printf("\n------ APPLYING GAUSS BACKWARD CENTRAL DIFFERENCE FORMULA ------\n");
y=table[mid][1] + n*table[mid-1][2];
for(i=3; i<=n; i++)
if(i%2==1)
{
n*=(p+(int)i/2)/(i-1);
y+=n*table[mid][i];
}
else {
n*=(p-(int)i/2 +1)/(i-1);
y+=n*table[mid-1][i];
}
}
printf("\n CENTRAL DIFFERENCE TABLE IS : \n");
for(i=0; i<=2*n-2; i++)
{
if(i%2==0)
printf("%2.3f %2.3f",table[i][0], table[i][1]);
else
printf(" ");
for(j=2; j<=n; j++)
if((j%2==0 && i%2==1) || (j%2==1 && i%2==0))
{
if(i>=j-1 && i<2*n-j)
printf(" %2.3f",table[i][j]);
}
else
printf(" ");
printf("\n");
}
printf("\n\n At x=%f, y=%f \n",x,y);
return 0;
}
#include<stdio.h>
#define max 10
int main()
{
float table[max][max],x, n, h, y, p;
int n, mid, i, j;
printf("\n How many values are to be entered? \n");
scanf("%d",&n);
printf("\n Enter the values of x and y in tabular format: \n\n");
for(i=0; i<=2*n-2; i+=2)
for(j=0; j<=1; j++)
scanf("%f",&table[i][j]) ;
printf("\n Find the value of y at x = ? \n");
scanf("%f",&x);
for(i=2; i<=n; i++)
for(j=i-1, n=1; n<=n+1-i; j+=2, n++)
{
table[j][i]=table[j+1][i-1] - table[j-1][i-1];
}
/* Finding the middle of the x column of the table */
if(n%2==1)
mid=n-1;
else
mid=n;
h=table[mid+2][0] - table[mid][0] ;
n=p=(x-table[mid][0])/h;
/* Using interpolation formula */
if(x>table[mid][0])
{
printf("\n APPLYING GAUSS FORWARD CENTRAL DIFFERENCE FORMULA \n");
y=table[mid][1] + n*table[mid+1][2];
for(i=3; i<=n; i++)
if(i%2==1)
{
n*=(p-(int)i/2)/(i-1);
y+=n*table[mid][i];
}
else
{
n*=(p+(int)i/2 -1)/(i-1);
y+=n*table[mid+1][i];
}
}
else
{
printf("\n------ APPLYING GAUSS BACKWARD CENTRAL DIFFERENCE FORMULA ------\n");
y=table[mid][1] + n*table[mid-1][2];
for(i=3; i<=n; i++)
if(i%2==1)
{
n*=(p+(int)i/2)/(i-1);
y+=n*table[mid][i];
}
else {
n*=(p-(int)i/2 +1)/(i-1);
y+=n*table[mid-1][i];
}
}
printf("\n CENTRAL DIFFERENCE TABLE IS : \n");
for(i=0; i<=2*n-2; i++)
{
if(i%2==0)
printf("%2.3f %2.3f",table[i][0], table[i][1]);
else
printf(" ");
for(j=2; j<=n; j++)
if((j%2==0 && i%2==1) || (j%2==1 && i%2==0))
{
if(i>=j-1 && i<2*n-j)
printf(" %2.3f",table[i][j]);
}
else
printf(" ");
printf("\n");
}
printf("\n\n At x=%f, y=%f \n",x,y);
return 0;
}
Comments
Post a Comment