Базовая справка по линейной алгебре numpy
-
22-08-2019 - |
Вопрос
Это то, что мне нужно сделать-
У меня есть это уравнение-
Топор = у
Где a - рациональная матрица m*n (m <= n), а x и y - векторы правильного размера.Я знаю A и y, но не знаю, чему равен x.Я также знаю, что нет x, где топор равна точно y.Я хочу найти вектор x 'такой, что топор как можно ближе к Y.Это означает, что (Ax' - y) максимально близко к (0,0,0,...0).
Я знаю, что мне нужно использовать функцию lstsq:http://www.scipy.org/doc/numpy_api_docs/numpy.linalg.linalg.html#lstsq
или функция SVD:http://www.scipy.org/doc/numpy_api_docs/numpy.linalg.linalg.html#svd
Я вообще не понимаю документацию.Кто -нибудь может показать мне, как использовать эти функции, чтобы решить мою проблему.
Большое спасибо!!!
Решение
SVD предназначен для случая m < n, потому что у вас недостаточно степеней свободы.
Документация по lstsq выглядит не очень полезной.Я считаю, что это метод наименьших квадратов для случая, когда m > n.
Если m < n, вам понадобится СВД.
Другие советы
А обновленная документация может быть немного полезнее...похоже, ты хочешь
numpy.linalg.lstsq(A, y)
SVD матрицы A дает вам ортогональные матрицы U и V и диагональную матрицу Σ такие, что
А = ты Σ В Т
где ты тыТ = я ; В ВТ = я
Следовательно, если
Икс А = й
затем
Икс ты Σ В Т = й
Икс ты Σ В Т В = й В
Икс ты Σ = й В
ты Т Икс Σ = й В
Икс Σ = ты й В
Икс = Σ -1 ты Т й В
Икс = В Т Σ -1 ты Т й
Итак, учитывая СВД А вы можете получить Икс.
Хотя для общих матриц А Б != Б А, это верно для вектора Икс что х У == ты Т Икс.
Например, рассмотрим Икс = ( х, у ), ты = ( а, б ;CD ):
Икс ты = ( Икс, у ) ( а, б ;CD )
= ( ха+yc, xb+yd )
= ( топор+cy, bx+dy )
= (а, с;б, г ) ( х;й)
= ты Т Икс
Это довольно очевидно, если вы посмотрите на значения в Икс ты являются скалярными произведениями Икс и столбцы ты, и значения в тыТИкс являются скалярными произведениями Икс и ряды тыТ, и соотношение строк и столбцов при транспозиции