C++代碼
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
double x[100];
double y[100];
double f[100];
double A[100];
int main()
{
int n;
double a;//所要求的x值
cin>>n;
for(int i=0;i<n;i++)
{
cin>>x[i];
}
for(int i=0;i<n;i++)
{
cin>>y[i];
}
cin>>a;
f[0]=y[0];
A[0]=y[0];//0到0的差商就是y[0]
for(int i=1;i<n;i++)
{
f[i]=y[i];//將每一個數值賦值給f
//每一層代表求0到i的差商
for(int j=i-1;j>=0;j--)
{
f[j]=(f[j+1]-f[j])/(x[i]-x[j]);
cout<<"f["<<j<<"]"<<"=(f["<<j+1<<"]-f["<<j<<"])/(x["<<i<<"]-x["<<j<<"])"<<endl;
}
A[i]=f[0];//A[i]代表i階差商,即0到i的差商
}
double res;
//=A[n-1]*(a-x[]);
res=A[n-1];
for(int i=n-2;i>=0;i--)
{
res=res*(a-x[i])+A[i];
}
cout<<res<<endl;
/*for(int i=1;i<n;i++)
{
f[i]=(f[i]-f[i-1])/(x[i]-x[i-1]);
}*/
return 0;
}
Matlab代碼
function P=Newton_interpolation(n,z,x,y)
% 牛頓插值法
% n爲x,y的個數
% z爲所要求x的值
t(1)=y(1);
A(1)=y(1);
for k=2:n
t(k)=y(k);
for j=k-1:-1:1
t(j)=(t(j+1)-t(j))/(x(k)-x(j));
end
A(k)=t(1);
end
P=A(n);
for i=n-1:-1:1
P=P*(z-x(i))+A(i);
end