同情的矩阵

时间:2016-01-25 15:19:35

标签: sympy substitution

我正在尝试使用sympy计算一些带矩阵的符号表达式。对于矩阵来说,sympy函数subs的行为很奇怪。我需要的是用符号表达式取字符串,用一些特定的矩阵代替这个表达式中的符号并计算结果。

对于标量,sympy.subs完成了这项工作:

import sympy as sp
sp.sympify("x1*x2**2").subs({"x1":5,"x2":10})

按预期给出500。

如果使用标量,我使用像

这样的矩阵
sp.sympify("x1*x2**2").subs({"x1":sp.Matrix([[0,1],[1,0]]),"x2":sp.Matrix([[1,0],[0,1]])}

结果是AttributeError: 'MatPow' object has no attribute 'as_base_exp'。只要

,这似乎很奇怪
aa,bb = sp.Matrix([[0,1],[1,0]]), sp.Matrix([[1,0],[0,1]])
aa*bb**2

按预期工作。

在同意中进行此类计算的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

sympify会将x1x2转换为符号,但要实现这一点,他们需要成为MatrixSymbols,例如

x1 = MatrixSymbol('x1', 2, 2)
x2 = MatrixSymbol('x2', 2, 2)
(x1*x2**2).subs({x1: Matrix([[0,1],[1,0]]), x2: Matrix([[1,0],[0,1]])})

默认情况下,这是未评估的,但您可以使用.doit对其进行评估,例如

(x1*x2**2).subs({x1: Matrix([[0,1],[1,0]]), x2: Matrix([[1,0],[0,1]])}).doit()