Как использовать приближение наименьших квадратов в MATLAB?
-
11-09-2019 - |
Вопрос
Для домашнего задания по линейной алгебре я решил следующее уравнение, используя MATLAB. \
оператор (это рекомендуемый способ сделать это):
A = [0.2 0.25; 0.4 0.5; 0.4 0.25]; y = [0.9 1.7 1.2]'; x = A \ y
что дает следующий ответ:
x = 1.7000 2.0800
В следующей части задания я должен решить то же уравнение, используя приближение наименьших квадратов (а затем сравнить его с предыдущим значением, чтобы увидеть, насколько точным является приближение).
Как я могу найти способ сделать это в MATLAB?
Предыдущая работа:Я нашел функцию lsqlin
, который, кажется, способен решать уравнения вышеуказанного типа, но я не понимаю, какие аргументы ему предоставить и в каком порядке.
Решение
млразделить, ("\") на самом деле тоже это делает.Согласно документация:
Если A — матрица размером mxn с m ~= n, а B — вектор-столбец с m компонентами или матрица с несколькими такими столбцами, то X = A\B — решение в смысле наименьших квадратов для уравнения под - или переопределенная система уравнений AX = B.Другими словами, X минимизирует норму (A*X - B), длину вектора AX - B.Ранг k A определяется из QR-разложения с поворотом столбца (подробнее см. Алгоритм).Вычисленное решение X имеет не более k ненулевых элементов на столбец.Если k < n, это обычно не то же самое решение, что и x = pinv(A)*B, которое возвращает решение методом наименьших квадратов.
Итак, на самом деле в первом задании вы решили уравнение с помощью LSE.
Другие советы
Включает ли ваше задание явное кодирование аппроксимации методом наименьших квадратов или просто использование другой функции, доступной в MATLAB?Если вы можете использовать другую функцию, один из вариантов: ЛСКР:
x = lsqr(A,y);