【问题标题】:lagrange interpolation拉格朗日插值
【发布时间】:2011-11-15 15:01:26
【问题描述】:

我检查了有关拉格朗日插值的答案,但找不到适合我的问题的答案。我正在尝试将拉格朗日插值用于带有 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,'-')

我总是很感激任何帮助!

【问题讨论】:

  • 我不太清楚这里的问题是什么。功能不行吗?另外,你应该看看vectorizing your code...四个for循环几乎从来都不是Matlab的做事方式。

标签: matlab interpolation


【解决方案1】:

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

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

是的,文件交换上有一个拉格朗日工具。是的,它甚至可能得到了一些很好的评论,由一年级学生撰写,他们不知道他们在看什么,遗憾的是他们没有数值分析的概念。不要使用它。

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

【讨论】:

    【解决方案2】:

    这并没有直接解决您的问题,但有一个 Lagrange interpolation function on the Matlab File Exchange 似乎很受欢迎。

    【讨论】:

      猜你喜欢
      • 2015-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-09
      相关资源
      最近更新 更多