拉格朗日插值



我查了拉格朗日插值的答案,但是我找不到一个适合我问题的答案。我试图使用拉格朗日插值曲面与matlab。假设有一个x,y向量f=f(x,y)我想插值这个f函数。我认为,我所做的在数学上是正确的:

function q = laginterp(x,y,f,ff)
n = length(x);
m = length(y);
v = zeros(size(ff));
for k = 1:n
    for l = 1:m
        w1 = ones(size(ff));
        w2 = ones(size(ff))
        for j = [1:k-1 k+1:n]
            for j = [1:l-1 l+1:n]
                w1 = (x-x(j))./(x(k)-x(j)).*w1;
                w2 = (y-y(i))./(y(l)-y(i)).*w2;
            end
        end
        ff = ff + w1.*w2.*f(k,l);
    end
end

这是我的函数然后我在等待任何给定的x y f的答案,比如

x= 0:4;
y = [-6 -3 -1 6];
f=[2 9 4 25 50];
v = laginterp(x,y,f,ff);
plot3(x,y,'o',f,q,'-')

我总是感激任何帮助!

拉格朗日插值本质上从来不是插值的好选择。是的,它在许多讨论插值的文本的第一章中使用。这样就好了吗?不。这只是为了方便,一个很好的方法来介绍插值的思想,有时证明一些简单的结果。

一个严重的问题是,用户决定尝试这个可怜的插值方法的借口,并发现它确实适用于2或3个点。哇,看那个!因此,显而易见的延续是将其用于有137个点的真实数据集,或10000个数据点或更多,其中一些点通常是重复的。发生了什么事?为什么我的代码没有给出好的结果?或者,他们可能只是盲目地假设它确实有效,然后发表一篇包含毫无意义的结果的论文。

是的,在文件交换中有一个拉格朗日工具。是的,它甚至可能得到了一些好评,那些一年级的学生根本不知道他们在看什么,可悲的是,他们没有数值分析的概念。别用它。

如果您需要MATLAB中的插值工具,您可以从griddata或TriScatteredInterp开始。这些将产生相当合理的结果。其他方法是径向基函数插值,在FEX上也有一个工具,以及各种各样的样条,我个人最喜欢的。请注意,在不了解或欣赏陷阱的情况下盲目使用任何插值都可能产生无意义的结果。

这并不能直接解决你的问题,但是在Matlab文件交换中有一个拉格朗日插值函数,看起来很流行。

最新更新