我正在使用 SymPy 来求解线性矩阵方程组。但是,我没有使用 SymPy 的 MatrixSymbol 对象,因为它似乎与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)))
给
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
没有帮助。