【发布时间】:2019-06-04 20:32:30
【问题描述】:
我正在使用 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]])
有什么方法可以避免符号在替换过程中与矩阵交换?在subs 调用上使用simultaneous=True 没有帮助。
【问题讨论】:
标签: python matrix sympy symbols commutativity