Write a C program on Newton forward interpolation method by MistarAV
#include<stdio.h>
#include<math.h>
int fact(int);
void main()
{
float arr[10][11],x,h,p,y,px=1;
int i,j,n,ch=30;
printf("\nEnter the number of data:");
scanf("%d",&n);
printf("\nEnter the data");
for(i=0;i<n;i++)
{ printf("X%d=",i+1);
scanf("%f",&arr[i][0]);
printf("Y%d=",i+1);
scanf("%f",&arr[i][1]);
}
//Forming difference table.
for(j=2;j<=n;j++)
for(i=0;i<n-1;i++)
arr[i][j]=arr[i+1][j-1]-arr[i][j-1];
//Printing table
printf("\nDifference table is:-");
printf("\n\tx\tY");
for(i=0;i<=n-2;i++)
printf("\t%c^%dY",ch,i+1);
for(i=0;i<n;i++)
{printf("\n");
for(j=0;j<n+1-i;j++){printf("\t%.4f",arr[i][j]);
}
}
//Take the value of x for f(x)
printf("\nEnter the value x for function f(x):");
scanf("%f",&x);
//Calculate the value of f(x) for x
h=arr[1][0]-arr[0][0];
p=(x-arr[0][0])/h;
y=arr[0][1];
for(i=1;i<n;i++)
{ px=px*(p-(i-1));
y=y+(arr[0][i+1]*px)/fact(i);
}
printf("\nthe value of function at x=%f is %f",x,y);
}
int fact(int n)
{ int i,f=1;
for(i=1;i<=n;i++)
f=f*i;
return f;
}
Output
Enter the number of data:4
Enter the data
X1=45
Y1=.7071
X2=50
Y2=.7660
X3=55
Y3=.8192
X4=60
Y4=.8660
Difference table is:-
x Y ^1Y ^2Y ^3Y
45.0000 0.7071 0.0589 -0.0057 -0.0007
50.0000 0.7660 0.0532 -0.0064
55.0000 0.8192 0.0468
60.0000 0.8660
Enter the value x for function f(x):52
the value of function at x=52.000000 is 0.788003
Comments
Post a Comment