在下面的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标量矩阵?
答案 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
分别返回c
和d
:
(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]]]
,所以它与其他矩阵不会很好。