在以下数学代码中
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 标量矩阵?
在以下数学代码中
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
优先级高于Set
运算符 ( =
)。
假设(基于您的标签选择)您打算使用矩阵乘法Dot
(.
)而不是时间(*
),我会写
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
会c
告诉你问题是什么:
In[6]:= FullForm[c]
Out[6]//FullForm= MatrixForm[List[List[1,0],List[0,-1]]]
您可以看到它具有Head[c] == MatrixForm
,因此它不会与其他矩阵配合得很好。