问题描述
|
在下面的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的显示形式为一个二乘二的矩阵,其中1,1和2,2元素本身就是2x2矩阵,而我希望它是一个普通的标量2x2矩阵?
解决方法
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)
, 这是Mathematica中的经典陷阱之一。
MatrixForm
显示包装程序的优先级高于the4ѭ运算符(=
)。
假设(基于标签选择)您打算使用矩阵乘法matrix6ѭ(.
)而不是Times(*
),我会写
a1 = {{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
然后快速浏览ѭ10中的FullForm
会发现问题所在:
In[6]:= FullForm[c]
Out[6]//FullForm= MatrixForm[List[List[1,0],List[0,-1]]]
您会看到它具有Head[c] == MatrixForm
,因此它不能与其他矩阵配合使用。