我检查了拉格朗日插值的答案,但我找不到合适的问题。我试图用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,'-')
我总是感激任何帮助!
答案 0 :(得分:4)
拉格朗日插值基本上不是插值的好选择。是的,它在许多讨论插值的文本的第一章中使用。这样做会好吗?不。这只是方便,介绍插值的好方法,有时可以证明一些简单的结果。
一个严重的问题是,用户决定尝试使用插值方法的这个悲惨的借口,并发现它并且看起来它确实可以工作2或3个点。哇,看那个!因此,显而易见的延续是在137个点或10000个数据点或更多的实际数据集上使用它,其中一些点通常是重复的。发生了什么?为什么我的代码没有给出好的结果?或者,也许他们会盲目地认为它确实有效,然后发表一篇包含无意义结果的论文。
是的,文件交换中有一个拉格朗日工具。是的,它甚至可能得到了一些好的评论,由一年级学生写的,他们不知道他们在看什么,并且遗憾地没有数值分析的概念。不要使用它。
如果在MATLAB中需要插值工具,可以从griddata或TriScatteredInterp开始。这些将产生非常合理的结果。其他方法是径向基函数插值,其中FEX上还有一个工具,以及我个人最喜欢的各种样条。请注意,盲目使用而不理解或不了解陷阱的任何插值都会产生毫无意义的结果。但几乎所有的数值方法都是如此。
答案 1 :(得分:1)
这不能直接解决您的问题,但有一个Lagrange interpolation function on the Matlab File Exchange似乎很受欢迎。