Необходим точный алгоритм наименьших квадратов - PullRequest
2 голосов
/ 01 декабря 2010

Я экспериментировал с двумя способами реализации алгоритма подбора методом наименьших квадратов (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 и умножить его на большое число, поэтому любое улучшение в точности проявится в моих результатах.

По причинам, в которые я не могу войти, я не могу использовать рутину Матлаба в своей работе.Итак, мне интересно, есть ли у кого-нибудь более точная рекомендация подхода, основанного на уравнениях, которую я мог бы использовать, это улучшение по сравнению с двумя вышеупомянутыми подходами, с точки зрения ошибок округления / точности станка / и т.д.

Любые комментарии приветствуются!заранее спасибо.

1 Ответ

0 голосов
/ 28 декабря 2010

Для полиномиальной аппроксимации вы можете создать матрицу Вандермонде и решить линейную систему, как вы уже сделали.

Другое решение заключается в использовании таких методов, как Гаусс-Ньютон для подгонки данных (поскольку система линейна, одна итерация должна работать нормально). Есть различия между методами. Одна из возможных причин - феномен Рунге .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...