Решение наименьшего квадрата с помощью MATLAB

Предположим, мы хотим определить коэффициенты полиномиального уравнения, которое аппроксимирует касательную функцию от 0 до 1, следующим образом:

-А матрица Вандермонда m×n. Записи заполняются с использованием значения m от 0 до 11(задается как ввод).

Соответствующий вектор b вычисляется с использованием функции тангенса.

-x рассчитывается путем ввода x= A\b в MATLAB.

Теперь, используя MATLAB, вычисленные x подставляются в Ax. Результат отображается на графике, и он довольно близок к касательной функции. Но если я использую поливальную функцию n−1 градуса (в MATLAB) для вычисления b, результирующий график значительно отличается от исходного b. Я не могу понять причину такой значительной разницы между результатами этих двух методов.

Вот код:

clear all;
format long;
m = 60;
n = 11;
t = linspace(0,1,m);
A= fliplr(vander(t));
A=A(:,1:n);
b=tan(t');
x= A\b;
y=polyval(x, t);
plot(t,y,'r')
y2= A*x
hold on;
plot(t,y2,'g.');
hold on;
plot(t,tan(t),'--b');

Любое понимание будет оценено. Спасибо.

1 ответ

Решение

После A= fliplr(vander(t)) A матрица равна

1 t(1) t(1)^2 ...
1 t(2) t(2)^2 ...
...
1 t(m) t(m)^2 ...

Это не правильно, потому что polyval принимает коэффициенты в убывающих степенях. Вам не нужно переворачивать столбцы A:

A= vander(t);
A= A(:,end-n+1:end);
Другие вопросы по тегам