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标量矩阵?
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)
这是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)
它返回c和d分别为:
(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)
然后,快速浏览一下FullForm的c会告诉你是什么问题:
In[6]:= FullForm[c]
Out[6]//FullForm= MatrixForm[List[List[1,0],List[0,-1]]]
Run Code Online (Sandbox Code Playgroud)
你可以看到它有Head[c] == MatrixForm,所以它不会与其他矩阵很好地搭配.