使用sympy模块计算涉及符号的矩阵乘法
我的问题是这样的:
import sympy as sp
p = sp.symbols('p')
I_p = sp.Identity(p)
C = sp.BlockMatrix([[I_p, I_p], [I_p, -I_p]])
Sigma_1 = sp.MatrixSymbol('Sigma_1', p, p)
Sigma_2 = sp.MatrixSymbol('Sigma_2', p, p)
Sigma = sp.BlockMatrix([[Sigma_1, Sigma_2], [Sigma_2, Sigma_1]])
C_Sigma_C_transpose = C * Sigma * C.T
print(C_Sigma_C_transpose)
## Matrix([
## [I, I],
## [I, -I]])*Matrix([
## [Sigma_1, Sigma_2],
## [Sigma_2, Sigma_1]])*Matrix([
## [I, I],
## [I, -I]])
结果和我预期的输出不一样。我该怎么修正呢?
1 个回答
2
与其使用 BlockMatrix
,不如直接用普通矩阵。这样操作就能顺利进行。
C = sp.Matrix([[I_p, I_p], [I_p, -I_p]])
Sigma = sp.Matrix([[Sigma_1, Sigma_2], [Sigma_2, Sigma_1]])
# the @ symbol is for matrix multiplication, but * will work
C_Sigma_C_transpose = C@Sigma@C.T
print(C_Sigma_C_transpose )
# Matrix([[2*Sigma_1 + 2*Sigma_2, 0], [0, 2*Sigma_1 - 2*Sigma_2]])
这是用LaTeX格式写的(来自Jupyter Notebook):