拉格朗日插值法是由Joseph-Louis Lagrange提出的插值的多项式,是估算函数数值的重要工具之一
前言
GitHub地址
代码
#include <iostream>
using namespace std;
int main()
{
double x[4],y[4],t;
for(int i=0;i<=3;i++)
{
cout<<"input x"<<i<<"=";
cin>>x[i];
cout<<"input y"<<i<<"=";
cin>>y[i];
}
cout<<"input x=";
cin>>t;
//输入x0-x3,y0-y3,x
double l1[4],l2[4]; //定义基函数分母和分子
for(int i=0;i<=3;i++)
{
l1[i]=l2[i]=1; //初始化分母,分子为1
}
double l[4];
for(int i=0;i<=3;i++)
{
for(int j=0;j<=3;j++)
{
if(i==j)
continue;
l1[i]*=t-x[j]; //计算基函数分子
l2[i]*=x[i]-x[j]; //计算基函数分母
}
l[i]=l1[i]/l2[i];
}
double p=0;
for(int i=0;i<=3;i++)
{
p+=y[i]*l[i]; //计算P(x)
}
cout<<"P("<<t<<")="<<p<<endl;
return 0;
}
解析
基函数分子,分母的计算
为方便处理,笔者在此处将分子和分母分开计算,分别命名为数组l1
和数组l2
这里使用for
循环来处理分子分母的计算
遇到i=j的情况时使用if-continue跳过该轮循环,如下所示:
if(i==j)
continue;
为了使l1
和l2
计算时的循环完整,需将l1
,l2
初始化为1
for(int i=0;i<=3;i++)
{
l1[i]=l2[i]=1;
}