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

Pee*_*oot 4 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
Run Code Online (Sandbox Code Playgroud)

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

Nas*_*ser 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
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出d:

(1  0
 0  1)
Run Code Online (Sandbox Code Playgroud)


Sim*_*mon 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
Run Code Online (Sandbox Code Playgroud)

它返回cd分别为:

(1  0
 0  -1)

(1  0
 0  1)
Run Code Online (Sandbox Code Playgroud)

编辑:
如果你输入,我忘了提

c = I a1.a2 // MatrixForm
Run Code Online (Sandbox Code Playgroud)

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

In[6]:= FullForm[c]
Out[6]//FullForm= MatrixForm[List[List[1,0],List[0,-1]]]
Run Code Online (Sandbox Code Playgroud)

你可以看到它有Head[c] == MatrixForm,所以它不会与其他矩阵很好地搭配.

  • @Peeter"FullForm"的重要性不够强调.只要您需要了解任何意​​外结果,您就会发现自己在使用它 (3认同)
  • @belisarius:除了版本8`Thamb`对象外.其中`FullForm`更像是python的`__repr __(self)`方法,它为您提供了一个输出,可以让您重新创建对象.:( (2认同)