(三)计算机数值方法之拉格朗日插值法

数学问题:

给定f(x)=\sqrt{x}的函数表如下:

用拉格朗日插值法计算 f(40)的近似值和误差(结果均保留5位小数)。

解决代码:

#include<iostream>
#include<string>
#include<iomanip>
#define maxsize 100
using namespace std;

double LagrangeInterPol(double arrX[maxsize], double arrY[maxsize], int n, double x)
{
    double temp;
   
    double result = 0;
    for (int k = 0; k < n; k++)
    {
        temp = 1;
        for (int i = 0; i < n; i++)
        {
            if (i != k)
            {
                temp = temp * (x - arrX[i]) / (arrX[k] - arrX[i]);
            }
        }
        result = result + arrY[k] * temp;
    
        
    }
    return result;

}
int main()
{
    int n;
    double arrX[maxsize], arrY[maxsize], result = 0, x, temp;
    string a;
    cin >> a;
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        cin >> arrX[i];
    }
    for (int i = 0; i < n; i++)
    {
        cin >> arrY[i];
    }
    cin >> x;
    
    result=LagrangeInterPol(arrX, arrY, n, x);
    cout << fixed << setprecision(5)<< result;

    return 0;
}

使用方法:

第一行是1个字符串,为函数接口名称:LagrangeInterPol

第二行是1个数值,为数据点个数:n

第三行是n个数值,为待插值数据点的自变量:arrX

第四行是n个数值,为待插值数据点的因变量:arrY

第五行是1个数值,为待求点数值:x

例如:

测试输入:

LagrangeInterPol

4

25 36 49 64

5 6 7 8

81

预期输出:

9.06993

问题解决:

注意:

拉格朗日插值法在数据插值中简单易懂且能确保通过所有给定数据点,提供多项式形式的高次插值精度;然而,该方法存在龙格现象、过拟合问题以及计算复杂性等缺点,可能导致插值误差增大,特别是在数据点分布不均匀或数据存在噪声时,使用该方法时需要注意控制误差。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值