SymPy中block_collapse()处理块矩阵先逆后转置返回1是否为Bug?
SymPy block_collapse处理先求逆再转置的块矩阵异常问题
这并非对block_collapse用法的误解,而是SymPy的一个bug。当对先执行逆运算再执行转置运算的块矩阵调用block_collapse()时,函数内部的简化逻辑出现错误,错误地将结果简化为标量1,而非预期的单位矩阵。
问题复现代码
from sympy import (BlockMatrix, symbols, Identity, ZeroMatrix, block_collapse) n = symbols('n') In = Identity(n) Zeron = ZeroMatrix(n,n) A = BlockMatrix([ [In, Zeron], [Zeron, In]]) At = A.transpose() Ati = At.inverse() Ai = A.inverse() Ait = Ai.transpose() # 正常输出单位矩阵 block_collapse(A) block_collapse(At) block_collapse(Ati) block_collapse(Ai) # 异常输出1 block_collapse(Ait)
临时解决方法
通过拆分操作步骤,先对逆矩阵调用block_collapse()将其转换为常规矩阵,再执行转置操作,即可得到正确结果:
Aib = block_collapse(Ai) Aibt = Aib.transpose() block_collapse(Aibt) # 输出预期的单位矩阵 # Matrix([ # [I, 0], # [0, I]])
内容的提问来源于stack exchange,提问作者David L Thiessen
相关产品推荐
相关产品推荐

