Newton 插值

#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插值的定义式及推导过程,设计算法。

猜你喜欢

转载自blog.csdn.net/adorkable_thief/article/details/80013667
今日推荐