拉格朗日插值法是由Joseph-Louis Lagrange提出的插值的多项式,是估算函数数值的重要工具之一

前言

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

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;

为了使l1l2计算时的循环完整,需将l1,l2初始化为1

for(int i=0;i<=3;i++)
    {
        l1[i]=l2[i]=1;
    }
Last modification:October 7, 2022
如果觉得我的文章对你有用,请随意赞赏