В школьном домашнем задании мне дали задачу на вычисление многочлена Лагранжа. Набор данных (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 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.0000 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];
Кривую, которую я получаю, можно увидеть
Синяя кривая показывает исходный набор данных, а зеленая кривая — точки, оцененные на основе полинома. Может ли кто-нибудь дать мне предложение о том, как мне удалить эту ошибку. Я думаю, что это какая-то ошибка точности. Заранее спасибо.