Я использую SymPy для решения линейной системы уравнений матриц. Тем не менее, я не использую объект MatrixSymbol SymPy, потому что он, кажется, не очень хорошо работает с solve_linear_system
. Поэтому вместо этого я просто использую нормальные символы с commutative=False
, что, кажется, работает нормально.
Однако, когда я пытаюсь окончательно подставить в матрицы для оценки решения, я сталкиваюсь с проблемой, что некоммутативным символам SymPy по-прежнему разрешено коммутировать с матрицами SymPy . Например:
import sympy as sy
A, B = sy.symbols('A, B', commutative=False)
expr = A*B
print(expr.subs(A, sy.eye(2)))
print(expr.subs(B, sy.eye(2)))
1010 * дает *
Matrix([
[1, 0],
[0, 1]])*B
Matrix([
[1, 0],
[0, 1]])*A
Это приводит к неправильному порядку умножения матриц при подстановке в несколько значений:
X = sy.Matrix([[1,1],[0,0]])
Y = sy.Matrix([[0,1],[0,1]])
print(expr.subs({A: X, B: Y}))
print(X*Y)
дает
Matrix([[0, 0], [0, 0]])
Matrix([[0, 2], [0, 0]])
Есть ли какой-нибудь способ избежать переключения символов с матрицами в процессе замены? Использование simultaneous=True
для вызова subs
не помогает.