Я подгонял линейные полиномы наименьших квадратов к данным, используя функцию polyfit
в Matlab. Из того, что я читал, здесь используется стандартный полиномиальный базис (мономиальный базис). Я читал, что использование полиномиального базиса Чебышева для подгонки приводит к большей численной стабильности, поэтому я хотел бы сделать это. Есть ли в матлабе такая возможность?
Необходимо подобрать полином, используя полиномиальную основу Чебышева
Ответы (2)
Я думаю, вам нужен набор инструментов Chebfun. Среди прочего, он перегружает polyfit с использованием точек Чебышева и интерполянтов Чебычева.
Помимо вышеперечисленного, вы всегда можете закодировать это самостоятельно. Это не так сложно. РЕДАКТИРОВАТЬ: см. сообщение mathematician1975 :). EDIT2: обновлен веб-сайт chebfun.
Здесь я предполагаю, что вам нужны многочлены Чебышева первого рода. Насколько я знаю, в Matlab такого нет. Хотя кодить самому несложно. Полиномы Чебышева определены только на [-1,1], поэтому сначала вы должны сопоставить свои данные x с этим диапазоном. Затем используйте рекуррентное соотношение для построения полиномов Чебышева http://en.wikipedia.org/wiki/Chebyshev_polynomials#Definition
T_(n+1)(x) = 2xT_(n)x - T_(n-1)(x)
Если x
- это ваши абсциссы, а y
ваши точки данных, сгенерируйте матрицу наблюдений A
(это эквивалент матрицы Вандермонда для мономиального базиса) для полиномиальной подгонки степени n
, используя:
n = degree;
m = length(x);
%% Generate the z variable as a mapping of your x data range into the
%% interval [-1,1]
z = ((x-min(x))-(max(x)-x))/(max(x)-min(x));
A(:,1) = ones(m,1);
if n > 1
A(:,2) = z;
end
if n > 2
for k = 3:n+1
A(:,k) = 2*z.*A(:,k-1) - A(:,k-2); %% recurrence relation
end
end
то вы можете просто решить линейную систему для ваших параметров решения (коэффициентов аппроксимации) b
с помощью деления матрицы
b = A \ y
Здесь вы должны помнить, что когда вы оцениваете свое приближение, вы должны сопоставить значение с интервалом [-1,1] перед его оценкой. Коэффициенты будут действительны только в начальном диапазоне x
, указанном вами для аппроксимации. Вы не сможете оценить приближение (в правильном смысле) за пределами вашего исходного диапазона x
. Если вы хотите сделать это, вы должны использовать более широкий интервал, чем ваши данные, таким образом, когда вы сопоставляете внутренние точки с использованием преобразования, ваши точки всегда будут лежать в [-1,1], и поэтому оценка вашего приближения действительна. .
Я некоторое время не использовал Matlab, поэтому в новых версиях может быть встроенная функция, которая сделает все это за вас. Это было не так, когда я в последний раз использовал его, и если ничего не помогает, вышеизложенное позволит вам генерировать полиномиальные приближения наименьших квадратов с использованием базиса Чебышева (первого рода)