欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-13 12:57:05
...

公式:
拉格朗日插值法——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
可见,有适当的点之后,用该法估计是不错的选择。

相关标签: 数值分析