#include <iostream> #include <cstdio> using namespace std; int main() { double x,sum = 0; int m1,m2,ret = 1; cout << "---------牛顿插值法---------\n分别输入插值点个数和插值次数:"; cin >> m1 >> m2; double p[m1][m2+2]; cout << "依次输入x点坐标" << endl; for(int j = 0;j<m1;++j) cin >> p[j][0]; cout << "依次输入y点坐标" << endl; for(int j = 0;j<m1;++j) cin >> p[j][1]; cout << "请输入待求点坐标:" << endl; cin >> x; for(int j = 2;j<m2+2;++j) //求解均差表 { for(int i = ret;i<m1;++i) { p[i][j]= (p[i][j-1]-p[i-1][j-1])/(p[i][0]-p[i-ret][0]); } ++ret; } for(int i = 0;i<m2;++i) //由Newton插值定义 { double w = 1; for(int j = 0;j<i;++j) { w = w*(x-p[j][0]); } sum += p[i][i+1]*w; } cout << sum; return 0; }
算法思想:
由均差的定义,先列出函数的均差表,之后根据Newton插值的定义式及推导过程,设计算法。