三个矩阵的乘积最终得到奇数块矩阵?

时间:2011-06-15 02:16:17

标签: wolfram-mathematica matrix-multiplication

在下面的mathematica代码中

a1 = {{0, -I}, {I, 0}}
a2 = {{0, 1}, {1, 0}}
a3 = {{1, 0}, {0, -1}}
c = I*a1*a2 // MatrixForm
d = c*a3 // MatrixForm

d的显示显示为2×2矩阵,1,1和2,2元素本身是2x2矩阵,而我希望它是一个普通的2x2标量矩阵?

2 个答案:

答案 0 :(得分:5)

use () to protect expression from MatrixFrom which is a wrapper.
use '.' for matrix multiplication. Not '*'

a1 = {{0, -I}, {I, 0}}
a2 = {{0, 1}, {1, 0}}
a3 = {{1, 0}, {0, -1}}
(c = I a1.a2) // MatrixForm
(d = c.a3) // MatrixForm

这是我得到的输出d:

(1  0
 0  1)

答案 1 :(得分:5)

这是Mathematica中的经典陷阱之一。

MatrixForm显示包装器的优先级高于Set运算符(=)。

假设(基于您的标签选择)您打算使用矩阵乘法Dot.)而不是Times(*),我会写

a1 = {{0, -I}, {I, 0}}
a2 = {{0, 1}, {1, 0}}
a3 = {{1, 0}, {0, -1}}
(c = I a1.a2) // MatrixForm
(d = c.a3) // MatrixForm

分别返回cd

(1  0
 0  -1)

(1  0
 0  1)

编辑:
如果你输入

,我忘了提
c = I a1.a2 // MatrixForm

然后快速查看FullForm的{​​{1}}将告诉您问题所在:

c

你可以看到它有In[6]:= FullForm[c] Out[6]//FullForm= MatrixForm[List[List[1,0],List[0,-1]]] ,所以它与其他矩阵不会很好。