Maple 中块矩阵的符号计算

计算科学 线性代数 符号计算
2021-12-03 04:57:24

由于算法的推导,我尝试使用 Maple (9.5) 来计算一些块矩阵表达式。不幸的是,Maple 似乎忽略了我对变量设置的假设。让我们考虑以下最小示例:

restart; with(LinearAlgebra);
assume(A,'SquareMatrix'); 
assume(B,'SquareMatrix'); 
E:=Matrix([A, B]); 

这导致

E:=(AB)

如果我现在尝试评估

Transpose(E).E

我最终得到

E:=(A2ABABB2)

代替

E:=(ATAATBBTABTB)

我现在的问题是,为什么 Maple 会忽略对变量 A 和 B 设置的假设?

1个回答

这不完全是您问题的答案,但评论太长了:在 SymPy 中(通过调用isympy来设置符号),这按预期工作:

A = MatrixSymbol('A',n,n)
B = MatrixSymbol('B',n,n)
E = BlockMatrix([[A,B]])
block_collapse(E.T*E)

产生所需的输出

⎡ T     T  ⎤
⎢A ⋅A  A ⋅B⎥
⎢          ⎥
⎢ T     T  ⎥
⎣B ⋅A  B ⋅B⎦

但如果我这样做

E = Matrix([[A,B]])
E.T*E

我明白了

⎡A⋅A  A⋅B⎤
⎢        ⎥
⎣B⋅A  B⋅B⎦

类似于您的输出(至少 SymPy 尊重矩阵乘法是不可交换的)。这表明您应该将您的明确声明E矩阵,但我不知道 Maple 是否可以这样做LinearAlgebra(它与已弃用的linalg包一起使用)。

我的建议是在 Maple 的问答中提出您的问题,http://www.mapleprimes.com/(从技术上讲,它与本网站无关,因为它与特定软件包的错误或问题有关)。


(如果这让您想切换到 SymPy,此页面可能会有所帮助。)