拉格朗日插值法——matlab代码实现

公式:
在这里插入图片描述

function y=lagrange(x0,y0,x)
% 给定一系列点x0,y0 
% x是我们要预测的值,由于可以有多个,因此用向量表示
% y返回我们的估计值,由于可以有多个,因此用向量表示
    n = length(x);% 要预测的个数
    y = zeros(n);% 初始化,并赋初值0
    for k = 1:length(x0)
        j_no_k=find((1:length(x0))~=k);% 在这里,find函数用于返回一个向量中不为下标k的元素(下标从1开始)
        y1=1;
        for j = 1:length(j_no_k)
            y1 = y1.*(x-x0(j_no_k(j))); % ∏(x-xj)
        end
        y = y + y1*y0(k)/prod(x0(k)-x0(j_no_k));% prod函数返回数组元素的乘积
    end
end
    

验证:给出f(x)=ln(x)

>> format(long)
>> x

x =

   0.400000000000000   0.500000000000000   0.700000000000000   0.800000000000000

>> y

y =

  -0.916291000000000  -0.693147000000000  -0.356675000000000  -0.223144000000000

>> lagrange(x,y,[0.4,0.54,0.6])

ans =

  -0.916291000000000  -0.615647384000000  -0.509975500000000

其中0.6的精确解为-0.5108256237659907
0.54的精确解为-0.616186139423817
可见,有适当的点之后,用该法估计是不错的选择。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值