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の表示は、2 x 2の行列として表示されます。ここで、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の古典的な落とし穴の1つです。

表示ラッパーは、演算子( )MatrixFormよりも優先順位が高くなります。Set=

(タグの選択に基づいて)Times()の代わりに行列乗算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ため、他の行列とうまく連携しません。

于 2011-06-15T02:31:43.120 に答える