Вопрос

Это то, что мне нужно сделать-

У меня есть это уравнение-

Топор = у

Где 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 )

= (а, с;б, г ) ( х;й)

= ты Т Икс

Это довольно очевидно, если вы посмотрите на значения в Икс ты являются скалярными произведениями Икс и столбцы ты, и значения в тыТИкс являются скалярными произведениями Икс и ряды тыТ, и соотношение строк и столбцов при транспозиции

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top