0

学校の宿題で、ラグランジュ多項式を計算する問題が出されました。データセット (x,y) には x = 0,1,2....20 が含まれていましたが、y = x - 0.3*rand() + 1; 次に、ルンゲ現象の観測を依頼されました。その後、この現象を取り除くためにエッジ周辺のチェビシェフ ノードを計算するように依頼されました。さて、ここでなんとなく行き詰まりました。私が計算しているラグランジュ多項式は、現時点では、すべてのデータ ポイントを通過しているわけではありません。

私が使用したラグランジュ多項式関数は、

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

私が得ている曲線を見ることができますここ

青い曲線は元のデータセットを示し、緑の曲線は多項式から評価された点を示します。このエラーを削除するにはどうすればよいか、誰でも提案できますか。これはある種の精度エラーだと思います。前もって感謝します。

4

1 に答える 1

2

おめでとう!あなたは、この問題に遭遇した 1,000 万人目 (および 3 人目) の人です。:)

精度です。21 点を通るラグランジュ多項式は 20 次多項式になります。

つまり、20 の 20 乗のオーダーで数値を上げています。次に、それらを1のオーダーである可能性のある他の数値から加算および減算します.(どのようにその多項式を評価しても、これらの同じ問題が発生します.)

double が処理できる数値の範囲は? 10進数で約16桁。数値のガベージが表示されることを期待してください。驚くことではありません。

どのようにそれを回避しますか? 高次多項式を使用しないでください! (ちなみに、この例が与えられた理由は、正確にその結果を確認するためです。数値法の最初のクラスにはすべて、そのような例があります。)

于 2013-05-08T21:23:38.003 に答える