Как частично инвертировать неквадратную матрицу с помощью sympy (псевдообратная матрица зависает)? - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь частично инвертировать неквадратную матрицу M: V-> W в том смысле, что для определенного базисного вектора v \ in V, так что никакой другой вектор не отображается в Mv, я хочу найти матрицу N такое, что NMv = v. Я говорю о частичной инверсии, потому что могут быть другие линейно независимые векторы x, y, такие что Mx = My.

Я использовал sympy, чтобы сделать это программно, и единственный способ у меня Это можно сделать с помощью псевдообратной функции .pinv(). Однако эта функция зависит от конкретной матрицы, которую я хочу (псевдо) инвертировать - я не уверен, является ли это ошибкой или матрица слишком велика.

Sympy может, однако, уменьшить M до форма эшелона строки с функцией .rref(), которая выполняется очень быстро. Было бы неплохо иметь возможность извлекать операции со строками (или элементарные матрицы), потому что их можно легко инвертировать, чтобы получить желаемый результат. Есть ли способ получить элементарные матрицы из функции .rref() (которая также возвращает опорные точки)? Есть ли другой способ, не связанный с .pinv(), получить желаемый результат?

1 Ответ

1 голос
/ 10 июля 2020

Я полагаю, вы имеете в виду что-то вроде этого:

In [32]: x, y = symbols('x, y')

In [33]: M = Matrix([[1, 1], [0, 1], [0, 0]])

In [34]: xy = Matrix([x, y])

In [35]: XY = Matrix([-1, 1])

In [36]: M
Out[36]: 
Matrix([
[1, 1],
[0, 1],
[0, 0]])

In [37]: M*xy
Out[37]: 
Matrix([
[x + y],
[    y],
[    0]])

In [38]: solve(Eq(M*xy, M*XY), [x, y])
Out[38]: {x: -1, y: 1}

Вы можете найти матрицу, сформировав расширенную матрицу и используя rref:

In [39]: Matrix.hstack(M, eye(3)).rref()
Out[39]: 
⎛⎡1  0  1  -1  0⎤           ⎞
⎜⎢              ⎥           ⎟
⎜⎢0  1  0  1   0⎥, (0, 1, 4)⎟
⎜⎢              ⎥           ⎟
⎝⎣0  0  0  0   1⎦           ⎠

In [40]: Matrix.hstack(M, eye(3)).rref()[0][:2,2:]
Out[40]: 
Matrix([
[1, -1, 0],
[0,  1, 0]])

In [41]: M.pinv()
Out[41]: 
Matrix([
[1, -1, 0],
[0,  1, 0]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...