使用SymPy计算含符号矩阵乘法结果不符,如何修正?
SymPy符号分块矩阵乘法未展开的解决方法
你的代码中,SymPy的BlockMatrix默认会延迟执行分块运算,直接相乘后只会保留乘法表达式结构,不会自动展开计算分块矩阵的乘积结果。
修正方法
对乘积结果调用doit()方法,触发分块矩阵的实际运算:
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]]) # 调用doit()执行分块乘法运算 C_Sigma_C_transpose = (C * Sigma * C.T).doit() print(C_Sigma_C_transpose)
运行结果
执行后会得到展开后的分块矩阵:
BlockMatrix([ [2*Sigma_1 + 2*Sigma_2, 0], [ 0, 2*Sigma_1 - 2*Sigma_2]])
内容的提问来源于stack exchange,提问作者John Stone
相关产品推荐
相关产品推荐

