2013-05-08 5 views
0

학교 숙제에서 문제가 발생하여 Lagrange 다항식을 계산해야했습니다. 데이터 집합 (x, y)은 x = 0,1,2 .... 20, 이고 y = x * 0.3 * rand() + 1; 그 다음 우리는 관찰을 요청 받았다 Runge's Phenomenon. 그 후, 우리는이 현상을 제거하기 위해 가장자리 부근에 Chebyshev Nodes을 계산하도록 요청 받았습니다. 글쎄, 내가 어떻게 든 붙어있는 곳이야. 지금 내가 계산하고있는 라그 랜지 다항식은 모든 데이터 포인트를 통과하지 않습니다.MATLAB; Lagrange Polynomial, 재미있는 오류

I 사용 라그랑주 다항식 함수이고,

function P = lagrangepoly(x, y) 
    %checks if two inputs vectors are obtained 
    if nargin ~= 2 
     error('The function accepts only two arguments of equal length'); 
    end 

    sz = size(x); %size of x 
    sz2 = size(y); % size of y 

    %checks if size of x and size of y matches and they are row vectors 
    if (sz(1) ~= sz2(1)) || (sz(2) ~= sz2(2)) || (sz(1) ~= 1) 
     error('Mismatch in length or unsupported arguments.'); 
    end 

    %takes the length of thevectors 
    len = sz(2); 

    %creating a emplt 1xlen container 
    P = zeros(1, len); 
    for i=1:1:len 
     %poly evaluates all the convolution of [1 -x(j)] except at x(i) 
     %prod evaluates all the product of (x(i) - x(j)) except at x(i) 
     P = P + (poly(x((1:len)~=i)) ./ prod(x(i)-x((1:len)~=i))) .* y(i); 
    end 
end 

그리고 이것을 위해 사용하고 데이터 집합이다 : XN = 0 0.5000 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000 11.0000 12.0000 13.0000 14.0000 15.0000 16.0000 17.0000 18.0000 19.0000 19.5000 20.0000];

yn = [0.7363 1.4701 1.7802 2.8232 3.9698 4.9934 5.9747 6.8635 7.9435 8.9775 9.9013 10.9318 11.8988 12.8343 13.7095 14.9318 15.8800 16.7028 17.8614 18.7046 19.8505 20.2849 20.7036];

내가 갖는 곡선은 here

파란색 곡선은 원래의 데이터 집합을 제공합니다 볼 수 있습니다, 그리고 녹색 곡선은 다항식에서 평가 된 포인트를 제공합니다. 누구든지 내게이 오류를 제거하는 방법에 대한 제안을 줄 수 있습니까? 나는 이것이 일종의 정밀 오차라고 생각한다. 미리 감사드립니다.

답변

2

축하합니다! 당신은이 문제를 겪은 1,000 만 번째 (그리고 3) 사람입니다. :)

정밀도입니다. 21 점을 통한 라그 랜지 다항식은 20 차 다항식입니다.

따라서 20 대 20의 숫자로 숫자를 올리면됩니다. 그런 다음 1의 순서 일 수있는 다른 숫자에서 더하거나 뺍니다. 그러나 다항식을 계산하면 같은 문제가 발생할 수 있습니다.

이중에서 처리 할 수있는 숫자의 범위는 무엇입니까? 약 16 진수. 수치스러운 쓰레기가 생길 것입니다. 놀랄 일도 아니지.

어떻게 피합니까? 고차원 다항식을 사용하지 마십시오! (그런데,이 예제를 제공 한 이유는 그 결과를 정확하게 보는 것입니다. 수치 방법의 모든 첫 번째 클래스는 그 안에 예제가 있습니다.)

+0

도움을 주셔서 감사합니다. :) – ponir