使用C++计算3次牛顿插值法

本文原文发表于本人博客 哔哔哔哔-使用C++计算3次牛顿插值法

牛顿插值法是数值分析中一种用于插值的多项式,由Issac Newton提出,是估算函数值的重要方法之一

前言

近期数值分析课程讲到了牛顿插值法,感觉比拉格朗日插值法更简单一些,出于兴趣便想用C++复现一下

GitHub地址

https://github.com/gst-be/newton_interpolation

代码

#include 
#include 
using namespace std;
int main()
{
	double x[5],f[5][5],t;
	for(int i=0;i<=4;i++)
	{
		cout<<"input x"<<i<<"=";
		cin>>x[i];
		cout<<"input y"<<i<<"=";
		cin>>f[0][i];		
	}    
        cout<<"input x=";
	cin>>t;
        //输入x0-x4,y0-y4,x


	for(int i=1;i<=4;i++)
	{
		for(int j=i;j<=4;j++)
	{
		f[i][j]=(f[i-1][j]-f[i-1][j-1])/(x[j]-x[j-i]);
	}
       }
       //生成均差表


	double p=0;
	double k[5];
	k[0]=1;
	for(int i=1;i<=4;i++)
	{
		k[i]=k[i-1]*(t-x[i-1]);
	}
	for(int i=0;i<=4;i++)
	{
		p+=f[i][i]*k[i];
	}
	cout<<"p="<<p<<endl; //输出函数值p
	return 0;
}

解析

均差表的生成

均差表由一个二维数组f[][]存储
使用C++计算3次牛顿插值法_第1张图片
其中每项f的值为f[i][j]=(f[i-1][j]-f[i-1][j-1])/(x[j]-x[j-i])

函数P(x)的计算

使用C++计算3次牛顿插值法_第2张图片
笔者在处理每项f[i][i]后面的整式时将其设为k[i]并单独计算
其中规定k[0]=1
k的生成代码为k[i]=k[i-1]*(t-x[i-1])
再规定p的初始值为0
之后使用for循环将p的值累加即可得到最终答案

本文发表于哔哔哔哔(bebebe.be)

你可能感兴趣的:(数学,cpp)