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;

}

Comments