Я пытаюсь написать код, который выполняет полиномиальную интерполяцию, но не могу заставить его работать.Я студент, и я следую логике из этого видео https://www.youtube.com/watch?v=VpI-wC94RKw, чтобы воссоздать его в виде кода в Matlab, но всякий раз, когда я пытаюсь создать свою собственную версию матрицы, показанной в видео, я вместо этогополучить матрицу, почти исключительно заполненную нулями (кроме одного элемента).Я не могу понять, почему это происходит.
Мой код:
x=[150, 200, 300, 500, 1000, 2000, 99999]';
y=[2, 3, 4, 5, 6, 7, 8]';
function f = interPoly(x,y)
% Skapar en matris A var varje rad är [x_1^6, x_1^5,..., 1] till [x_n^6, x_n^5,..., 1]
A = [x.^6 x.^5 x.^4 x.^3 x.^2 x ones(numel(x),1) y];
% Gaussar matris A
R = rref(A);
% Plockar sista kolumnen ur R
c = R(:,end);
f = c(1)*x.^6+c(2)*x.^5+c(3)*x.^4+c(4)*x.^3+c(5)*x.^2+c(6)*x+c(7);
end
(Матрица «А» здесь проблематична. Функция, которую я получаю в итоге,также просто заполнены нулями в качестве значений. Также извините за комментарии на шведском языке)
У меня есть 7 значений по x и y и, следовательно, полином 6-го порядка, но я не знаю, что константа должнабыть во втором последнем столбце, так что я просто положил туда несколько (я новичок в этом, поэтому я немного не уверен в логике).
В любом случае, я пытался использовать ту же функцию с некоторыми другими входными данными, и она работала нормально.
Альтернативные входные данные:
x=[0, 0.5, 1, 1.5, 2, 2.99, 3]';
y=[0, 0.52, 1.09, 1.75, 2.45, 3.5, 4]';
Дает ли я нулипотому что элементы переполнены (например, 99999 ^ 6 - это очень большое число)?Я не очень понимаю, что здесь происходит и почему он отлично работает с другим набором входных данных.Помощь?
Спасибо!
РЕДАКТИРОВАТЬ: Весь смысл этой задачи (заданной моей школой) заключается в сравнении метода «наименьших квадратов» (для которого я также написал код, но не опубликовал)) методом полиномиальной интерполяции (тот, что в коде выше).Последнее значение в 'x' выше должно быть бесконечностью (f (inf) = 8), поэтому я просто заменил его действительно большим числом, поэтому оно не распределяется «равномерно».Есть ли лучший способ сделать это?