数学コードの次のビットで
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行列であると思いますか?
数学コードの次のビットで
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行列であると思いますか?
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の古典的な落とし穴の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
ため、他の行列とうまく連携しません。