Существует нет встроенного polyfit
функции, как в Matlab, но вы можете сделать свой собственный:
function cf = polyfit(x,y,n)
A = ones(length(x),n+1)
for i=1:n
A(:,i+1) = x(:).^i
end
cf = lsq(A,y(:))
endfunction
Эта функция принимает два вектора одинакового размера (они могут быть либо строки или столбца векторов; оператор двоеточия что они ориентированы на столбцы в вычислении) и степень полинома.
Он возвращает столбец коэффициентов, упорядоченный от 0-й до n-й степени.
Вычислительный метод прост: установите (обычно, переопределенную) линейную систему, которая требует, чтобы полином проходил через каждую точку. Затем разрешите его в смысле наименьших квадратов с lsq
(на практике кажется, что cf = A\y(:)
выполняет тождественно, хотя алгоритм здесь немного отличается).
Пример использования:
x = [-3 -1 0 1 3 5 7]
y = [50 74 62 40 19 35 52]
cf = polyfit(x,y,4)
t = linspace(min(x),max(x))' // now use these coefficients to plot the polynomial
A = ones(length(t),n+1)
for i=1:n
A(:,i+1) = t.^i
end
plot(x,y,'r*')
plot(t,A*cf)
Выход:
