2011-11-15 3 views
0

Lagrange 보간법에 대한 답변을 확인했지만 적절한 질문을 찾지 못했습니다. matlab을 사용하여 표면에 Lagrange 보간을 사용하려고합니다. x와 y 벡터와 f = f (x, y)가 있다고 가정 해 봅시다. 이 f 함수를 보간하고 싶습니다.lagrange interpolation

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를,

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를 기다리고 있어요 : 나는 무엇을 내가 한 것은 수학적으로 올바른 생각 어떤 도움에 감사드립니다!

+0

여기에 어떤 문제가 있는지 명확하지 않습니다. 기능이 작동하지 않습니까? 또한, [코드를 벡터화하는 방법]을 살펴보아야합니다. (http://www.mathworks.com/support/tech-notes/1100/1109.html) ... 네 개의 for 루프는 거의 MATLAB 방식이 아닙니다. 소지품. – eykanal

답변

5

라그랑주 보간은 본질적으로 내삽을위한 좋은 선택이 아닙니다. 예, 보간법을 설명하는 많은 텍스트의 첫 번째 장에서 사용됩니다. 그게 좋은거야? 아니요. 단지 편리하고, 보간법 아이디어를 소개하고, 때로는 간단한 결과를 증명하는 좋은 방법입니다.

심각한 문제는 사용자가 보간 방법으로이 비참한 핑계를 사용하기로 결심하고, 2와 3 포인트에서 작동한다는 것을 알 수 있습니다. 와우, 저것 좀 봐! 따라서 실제 데이터 세트에서 137 포인트 또는 10000 데이터 포인트 이상을 사용하는 것이 분명합니다. 일부 포인트는 대개 복제본입니다. 어떻게 된 거예요? 내 코드가 좋은 결과를 내지 않는 이유는 무엇입니까? 아니면 어쩌면 그들은 맹목적으로 그것이 작동했다고 가정하고, 무의미한 결과를 담은 종이를 출판 할 것입니다.

예, 파일 교환에는 Lagrange 도구가 있습니다. 그렇습니다. 첫해 학생들이 뭘보고 있는지 전혀 알지 못했고, 슬픈 듯이 수치 분석에 대한 개념이없는 훌륭한 리뷰도있었습니다. 사용하지 마십시오.

MATLAB에서 보간 도구가 필요한 경우, griddata 또는 TriScatteredInterp로 시작할 수 있습니다. 이것들은 꽤 합리적인 결과를 가져올 것입니다. 다른 방법으로는 방사형 기초 함수 보간법이 있으며 그 중 FEX에 도구가 있으며 다양한 개인용 스플라인이 있습니다. 함정을 이해하거나 이해하지 않고 맹목적으로 사용되는 모든 보간법은 의미없는 결과를 초래할 수 있으며 이로 인해 발생할 수 있습니다. 그러나 이것은 거의 모든 수치 적 방법에 해당됩니다.

+0

답변 해 주셔서 감사합니다. – user1018331

관련 문제