#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
The maximum number of const int n=4;//interpolation nodes is four
using namespace Std;
Double x1[n+1]= {0.4,0.55,0.65,0.8,0.9};
Double y1[n+1]= {0.4175,0.57815,0.69657,0.88811,1.02652};
/*
Www.quzhuanpan.com
Reprint please be sure to inform
*/
void Diffcoefficient (double x1[n+1],double y1[n+1],double f[n+1][n+1])//f[n+1][n+1], record difference quotient
{
int i,j;
for (i=0; i<=n; i++)
{
f[i][0]=y1[i];//points with interpolated values of f[0][0]
}
for (j=1; j<=n; j + +)
for (i=j; i<=n; i++)
{
F[i][j]= (F[i][j-1]-f[i-1][j-1])/(X1[i]-x1[i-j]);//Order Difference quotient
printf ("%f\n", F[i][j]);
}
printf ("%12s%12s", "Xi", "F (xi)");
for (j=1; j<=n; j + +)
{
printf ("%9d%s", J, "step");
}
printf ("\ n");
for (j=1; j<=38; j + +)
{
printf ("--");
}
printf ("\ n");
for (i=0; i<=n; i++)
{
printf ("%12f", X1[i]);
for (j=0; j<=i; j + +)
{
printf ("%13f", F[i][j]);
}
printf ("\ n");
}
for (i=0; i<=38; i++)
{
printf ("--");
}
printf ("\ n");
}
/*
Www.tengxunyun.me
Reprint please be sure to inform
*/
int main ()
{
int i,m,k;
Double p,f[n+1][n+1];
float X;
Diffcoefficient (X1,Y1,F);
printf ("The number of the interpolation points is m=");
scanf ("%d", &m);
for (i=1;i<=m;i++)
{
printf ("\ninput x%d=", i);
scanf ("%f", &x);
P=f[n][n];
for (k=n-1;k>=0;k--)
{
p=p* (X-x1[k]) +f[k][k];
}
printf ("P (%f) =%f\n", x,p);
}
Getch ();
return 0;
}
Newton difference polynomial C language version