MATLAB;拉格朗日多项式,一个有趣的错误

MATLAB;拉格朗日多项式,一个有趣的错误,matlab,math,numerical-methods,numerical,polynomial-math,Matlab,Math,Numerical Methods,Numerical,Polynomial Math,在我的学校作业中,有人给了我一道题,要求我计算拉格朗日多项式。数据集(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

在我的学校作业中,有人给了我一道题,要求我计算拉格朗日多项式。数据集(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.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 18.7046 19.8505 20.2849 20.7036]

我得到的曲线可以看到

蓝色曲线给出原始数据集,绿色曲线给出根据多项式计算的点。 有谁能给我建议如何消除这个错误吗。我认为这是某种精度误差。
提前感谢。

祝贺你!您是第1000万(也是第3)个遇到此问题的人。:)

这是精确的。通过21个点的拉格朗日多项式将是20次多项式

所以你把数字从20次方提高到20次方。然后你可以从其他数字中加减它们,这些数字可能是1的数量级。(无论您如何评估该多项式,它都会导致这些问题。)

double可以处理的数字范围是多少?大约16位小数。希望看到数字垃圾。毫不奇怪,你做到了

你如何避免它?不要使用高阶多项式!(顺便说一句,给你举这个例子的原因就是为了准确地看到这个结果。数值方法中的每一个第一类都有这样一个例子。)