2011-11-15 188 views
0

ラグランジュ補間に関する回答を確認しましたが、私の質問に適切なものが見つかりませんでした。私は、MATLABで表面のラグランジュ補間を使用しようとしています。私はxとyベクトルとf = f(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,'-') 

のように私はいつもだfが、それは私の関数であり、その後、私は、任意のxに対しての答えを待っている

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 

、Y:私は私がやったことは数学的に正しいと思います、助けてくれてありがとう!

+0

ここで問題が何であるかはっきりしていません。この機能は機能しませんか?また、[あなたのコードをベクトル化する](http://www.mathworks.com/support/tech-notes/1100/1109.html)を見てください.4つの 'for'ループは、ほとんどMATLABのやり方ではありませんもの。 – eykanal

答えて

5

ラグランジュ補間は本質的に補間には決して適していません。はい、補間を説明する多くのテキストの最初の章で使用されています。それはそれを良いものにしますか?いいえ、ちょうど便利で、補間のアイデアを紹介する良い方法、時には簡単な結果を証明することができます。

深刻な問題は、補間方法にこの悲惨な言い訳を試してみると、2〜3点でうまくいくことがわかります。うわー、それを見て!したがって、実際のデータセットで137ポイント(10000データポイント以上)を使用することは明らかですが、そのうちのいくつかは通常複製されます。何が起こった?なぜ私のコードは良い結果をもたらさないのですか?または、恐らく彼らはそれがうまくいったと盲目的に仮定し、無意味な結果を含む論文を発表するでしょう。

はい、ファイル交換にはLagrangeツールがあります。はい、それはおそらく、実際に何を見ていたのか、そして悲しげに数値分析の概念をもたない初年度の学生によって書かれた良いレビューを得ていると思います。それを使用しないでください。

MATLABで補間ツールが必要な場合は、griddataまたはTriScatteredInterpから開始できます。これらはかなり合理的な結果をもたらすでしょう。他の方法はラジアル基底関数の補間法であり、その中にはFEXのツールもあり、私の個人的な好みである多種多様なスプラインもあります。落とし穴を理解しないで盲目的に使用されるANY補間は無意味な結果をもたらす可能性があります。しかし、これはほぼすべての数値的方法に当てはまります。

+0

お返事ありがとうございました! – user1018331