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

问题描述

| 在下面的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
,因此它不能与其他矩阵配合使用。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...