牛顿插值公式
一.差商
1阶差商:
2阶差商:
n阶差商:
二.差商表
三.插值公式
其中的系数a0,a1,a2…an,相当于f(x0),f[x0,x1],f[x0,x1,x2],…,f[x0,x1,…,xn]
四.算法流程
五.算法c++代码实现
#include<iostream>
#include<algorithm>
using namespace std;
template <typename T>
void newton(T n){
double x[n+1] = {0};
double y[n+1] = {0};
double z[n+1] = {0};
for(int i = 0 ; i <= n ; i ++){
cout<<"请输入第"<<i<<"个点:";
cin>>x[i];
cin>>y[i];
z[i] = y[i];
}
for(int i = 1 ; i <= n ; i ++){//计算差商
for(int j = i ; j <= n ; j ++){
y[j] = (z[j] - z[j-1]) / (x[j] - x[j-i]);
}
for(int j = i ; j <= n ; j ++){
z[j] = y[j];
}
}
double v = 0;
double u;
cout<<"请输入插值u:";
cin>>u;
for(int i = n ; i >= 0 ; i --){//计算插值N(u)
v = v*(u - x[i]) + y[i];
}
cout<<"插值u:"<<u<<" "<<"插值u对应的近似值v:"<<v;
}
int main(){//n+1个点确定 n阶差商 ,最多确定n次牛顿插值多项式
int n;
cout<<"请输入需要的牛顿插值多项式的次数:";
cin>>n;// n次牛顿插值多项式需要至少n+1个点
newton(n);
return 0;
}