В настоящее время я пишу программу на С++, где у меня есть векторы независимых и зависимых данных, которые я хотел бы поместить в кубическую функцию. Однако у меня возникают проблемы с созданием полинома, который может соответствовать моим данным.
Часть проблемы заключается в том, что я не могу использовать различные числовые пакеты, такие как GSL (длинный рассказ); возможно, это может быть даже излишним для моего дела. Мне не нужно очень обобщенное решение для финализации наименьших квадратов. Я специально хочу подгонять мои данные к кубической функции. У меня есть доступ к библиотеке векторов Sony, которая поддерживает матрицы 4x4 и может, среди прочего, вычислять их обратные.
Во время прототипирования в Scilab я использовал такую функцию, как:
function p = polyfit(x, y, n)
m = length(x);
aa = zeros(m, n+1)
aa(:,1) = ones(m,1)
for k = 2:n+1
aa(:,k) = x.^(k-1)
end
p = aa\y
endfunction
К сожалению, это не соответствует моей текущей среде. Приведенный выше пример должен поддерживать матрицу размеров M x N + 1. В моем случае это M x 4, где M зависит от того, сколько у меня данных выборки. Там также проблема левого деления. Мне понадобится библиотека матриц, поддерживающая обратную матрицу произвольных размеров.
Есть ли алгоритм для наименьших квадратов, где я могу избежать вычисления aa\y или, по крайней мере, ограничить его матрицей 4x4? Я полагаю, что я пытаюсь переписать вышеупомянутый алгоритм в более простой случай, который работает для подгонки к кубическому многочлену. Я не ищу решение для кода, но если кто-то может указать мне в правильном направлении, я был бы признателен.