4

在以下数学代码中

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 标量矩阵?

4

2 回答 2

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)
于 2011-06-15T02:28:51.550 回答
5

这是 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

分别返回cd

(1  0
 0  -1)

(1  0
 0  1)

编辑:
我忘了提你是否输入

c = I a1.a2 // MatrixForm

然后快速浏览一下FullFormc告诉你问题是什么:

In[6]:= FullForm[c]
Out[6]//FullForm= MatrixForm[List[List[1,0],List[0,-1]]]

您可以看到它具有Head[c] == MatrixForm,因此它不会与其他矩阵配合得很好。

于 2011-06-15T02:31:43.120 回答