Решение матричного уравнения symboli c с помощью SymPy - PullRequest
1 голос
/ 04 августа 2020

Я использую sympy для решения матричного уравнения. Например,

A = sym.MatrixSymbol('A', 5, 5)
s = sym.MatrixSymbol('s', 5, 1)
z = sym.MatrixSymbol('z', 5, 1)

eq = A * s - z

solution = sym.solve(eq, s)

Я ожидаю, что «решение» будет содержать A ^ {- 1} z, поскольку s = A ^ {- 1} z является решением As - z = 0. Однако решение содержит пустой список, когда я запускаю этот код. Мы будем благодарны за любые советы о том, как получить результат, который я ищу здесь.

1 Ответ

0 голосов
/ 05 августа 2020

У вас мог бы быть еще более простой пример, который не дает решения:

import sympy as sym
s = sym.MatrixSymbol('s', 5, 1)
z = sym.MatrixSymbol('z', 5, 1)

eq = s - z

solution = sym.solve(eq, s)

Я думаю, что поддержка решения уравнений с помощью MatrixSymbols очень ограничена. Я не нашел ничего общего с этим в документации. Вместо этого либо игнорируйте тот факт, что это матрица, и рассматривайте ее как некоммутативный символ, либо определяйте все ваши элементы в матрице как отдельные символы:

A, s, z = sym.symbols("A s z", commutative=False)
eq = A * s - z
solution = sym.solve(eq, s)
A = sym.Matrix(5, 5, sym.symbols("a0:25"))
s = sym.Matrix(5, 1, sym.symbols("s0:5"))
z = sym.Matrix(5, 1, sym.symbols("z0:5"))
eq = A * s - z
solution = sym.solve(eq, s)

Первое решение, похоже, консенсус по GitHub . Последнему нужно найти обратную матрицу 5x5 из первых принципов, что занимает чрезвычайно много времени. Скорее всего, вам придется подождать несколько минут, пока он решит это основное уравнение c. Однако это довольно полезно для матриц 3x3, где можно увидеть отдельные элементы s.

...