2011-11-15 34 views
0

我檢查了關於拉格朗日插值的答案,但是我找不到適合我的問題的答案。我試圖用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

我不是很清楚問題在這裏。該功能不起作用嗎?另外,你應該研究[矢量化你的代碼](http://www.mathworks.com/support/tech-notes/1100/1109.html)...四個for循環幾乎從來都不是Matlab的做法的東西。 – eykanal

回答

5

拉格朗日插值本質上不是插值的好選擇。是的,它被用在討論插值的許多文章的第一章中。這是否使它好?不,這樣做很方便,是介紹插值思想的好方法,有時也可以證明一些簡單的結果。

一個嚴重的問題是,用戶決定嘗試插入方法的這個悲慘的藉口,並發現你看,它確實工作2或3分。哇,看看!因此,顯而易見的延續是將它用於137點或10000數據點或更多的真實數據集,其中一些點通常是重複的。發生了什麼?爲什麼我的代碼不能給出好的結果?或者,也許他們會盲目地認爲它確實起作用,然後發佈含有無意義結果的論文。

是的,文件交換中有一個拉格朗日工具。是的,它甚至可能得到了一些很好的評論,這些評論是由一年級的學生編寫的,他們沒有真正瞭解他們在看什麼,並且可悲的是沒有數字分析的概念。不要使用它。

如果您需要MATLAB中的插值工具,您可以從griddata或TriScatteredInterp開始。這將產生相當合理的結果。其他方法是徑向基函數插值,其中FEX上還有一個工具,以及我個人最喜歡的各種樣條。請注意,任何插值,盲目使用而不理解或認識陷阱可以並且會產生無意義的結果。但幾乎任何數值方法都是如此。

+0

非常感謝您的回答! – user1018331