Я экспериментировал с двумя способами реализации алгоритма подбора методом наименьших квадратов (LSF), показанными здесь .
Первый код - это просто учебный подход, описанный Вольфрамом.страница на LSF.Второй код переупорядочивает уравнение, чтобы минимизировать машинные ошибки.Оба кода дают одинаковые результаты для моих данных.Я сравнил эти результаты с функцией Matlab p = polyfit (x, y, 1), используя коэффициенты корреляции, чтобы измерить «добротность» соответствия и сравнить каждую из 3 подпрограмм.Я заметил, что в то время как все 3 метода дали хорошие результаты, по крайней мере для моих данных, подпрограмма Matlab имела наилучшее соответствие (другие 2 процедуры имели схожие результаты друг с другом).
Функция Matlab p = polyfit (x, y, 1) использует матрицу Вандермонда, матрицу V (матрица nx 2) и QR-факторизацию для решения задачи наименьших квадратов.В коде Matlab это выглядит так:
V = [x1,1; x2,1; x3,1; ... xn,1] % this line is pseudo-code
[Q,R] = qr(V,0);
p = R\(Q'*y); % performs same as p = V\y
Я не математик, поэтому я не понимаю, почему это будет более точным.Хотя разница невелика, в моем случае мне нужно получить наклон из LSF и умножить его на большое число, поэтому любое улучшение в точности проявится в моих результатах.
По причинам, в которые я не могу войти, я не могу использовать рутину Матлаба в своей работе.Итак, мне интересно, есть ли у кого-нибудь более точная рекомендация подхода, основанного на уравнениях, которую я мог бы использовать, это улучшение по сравнению с двумя вышеупомянутыми подходами, с точки зрения ошибок округления / точности станка / и т.д.
Любые комментарии приветствуются!заранее спасибо.