pianofisica

Mathematics & Physics, Maxima, a bit Python & Wolfram, and Arts

Maximaを使ってSU(2)を学ぶ(Maximaによる行列の計算)

数学の具体的な計算にMaximaを使って、数学もMaximaも同時に学んでしまいましょう。

今回はMaximaを使って行列の計算をしてみたいと思います。

Maximaでの行列の操作方法をいくつか解説したあと、

2次特殊ユニタリ群 SU(2) を学びつつ、計算の補助としてのMaximaの使い方を紹介します。

Maximaのごく基本的な使い方については以下の記事を参照してください:

pianofisica.hatenablog.com



行列の諸操作

行列を入力する

Maximaで行列を入力するには

A: matrix( [a11, a12], [a21, a22] );
B: matrix( [b11, b12], [b21, b22] );
M: matrix( [m1, m2] );
N: matrix( [n1], [n2] );

などとすれば良いです。

ここで  A B (2,2)-行列、 M (1,2)-行列、 N (2,1)-行列としました。

行列の要素を参照する

行列の要素を参照するには

A[1][2];   /*  つまり行列 A の (k ,l) 成分は A[k][l] です */
B[2][2];

または

A[1,2];   /*  つまり行列 A の (k ,l) 成分は A[k,l] です */
B[2,2];

とします。

行列の演算(積、和、定数倍、ベキ乗)

行列の積の定義から、行列の積  AB MA AN MAN などが許されます。これらはMaximaでは

A.B;    /*  行列の積はピリオド  */
M.A;
A.N;
M.A.N;

として計算します。行列のベキ乗は

A^^2;

です。ちなみに、通常の数に対するベキ乗を行列に使った

A^2;

は、行列の各成分をベキ乗した行列を出力します。

同様に、同じ型の行列に対して、通常の数に対する積を行列に使った

A*B;

は、行列の各成分の積をとった行列を出力します。ですので、異なる型の行列に通常の積を使った

M*A;

などはエラーとなります。

同じ型の2つの行列に対しては、それらの和や差は通常の数と同じ入力で計算できます:

A+B;
A-B;

定数倍も通常の積を使って

a*A;

となります。

逆行列をとる

逆行列

invert(A);

または

A^^(-1);

によって求められます。

 


行列式を求める

行列式を求めるには

determinant(A);

と入力します。

単位行列

単位行列

ident(3);

です。引数の数字は行列のサイズを指定します。

たとえば、逆行列になっていることを確認するときなどに

is(xthru(A.invert(A))=ident(2));

のようにして使うことができます。

トレースをとる

行列のトレースをとるにはまず

load("nchrpl");

でパッケージ"nchrpl"を読み込んでおく必要があります。その後は

mattrace(A);

とすることでトレースを計算できます。

転置をとる

転置行列は

transpose(A);

です。

余因子行列をとる

転置行列をとる操作が transpose だったので、随伴行列をとる操作は adjoint ではないか?
と思いますが、adjoint は余因子行列をとる操作です:

C: matrix( [c11, c12,c13], [c21, c22,c23], [c31, c32,c33] );
adjoint(C);
随伴行列をとる

随伴行列をとるには自分でその操作を定義しておけば良いでしょう:

dagger(X):=conjugate(transpose(X))$

たとえば

U:matrix( [x+%i*y,z+%i*w],[-(z-%i*w),x-%i*y] )$
dagger(U);
expand(U.dagger(U));

ここで、何も宣言していない文字は実数として扱われることを注意しておきます。



2次特殊ユニタリ群 SU(2)

SU(2) の元

SU(2)(2次特殊ユニタリ群)は  (2,2)-行列  U で、ユニタリ条件

 UU^\dagger=I_2

行列式に対する特殊な条件

 \det U=1

をみたす行列全体のなす群です。ここで  I_2 (2,2)-行列の単位行列です。

これらの条件から  \displaystyle{V=\left(\begin{array}{cc} v_{11} & v_{12} \\ v_{21} & v_{22} \end{array} \right)}\in SU(2) の行列成分には制限が課されます。

まず上の2条件のうちの第1の条件から  v_{11}v_{22}-v_{21}v_{12}=1 です。

そして、上の2条件のうち第1の条件から

 U^\dagger=U^{-1}

であることがわかります。これらの条件から

declare([v11,v12,v21,v22], complex)$
dagger(X):=conjugate(transpose(X))$
V:matrix( [v11,v12],[v21,v22] )$
subst(1, determinant(V), dagger(V)=invert(V));

より

 v_{21}=-v^*_{12} \qquad v_{22}=v^*_{11}

を得ます。したがって

 \displaystyle{V=\left(\begin{array}{cc} \alpha & \beta \\ -\beta^* & \alpha^* \end{array} \right)}

という2つの複素数  \alpha \beta でかけることがわかります。

さらに  \alpha=x+iy \beta=z+iwとすると行列式の条件から

expand(determinant(matrix( [x+%i*y,z+%i*w],[-(z-%i*w),x-%i*y] )));

により

 x^2+y^2+z^2+w^2=1

であることがわかります。

よって SU(2) は(局所的には)3次元単位球面と同じものであることがわかります。

つまり、SU(2) の異なる2つの行列は、3次元単位球面上の異なる2つの点に対応すると思えます。


いま SU(2) は行列式が1なので、その逆行列が必ず存在します。

このことから、SU(2) の異なる2つの行列  U_1 ,\ U_2 \in \text{SU(2)} に対して

 U_2=\Lambda_{21} U_1

をみたす  \Lambda_{21}\in \text{SU(2)} が存在します。ここでSU(2) の行列を3次元球面上の点と同一視すると、

この行列  \Lambda_{21} U_1 への作用は、3次元空間の回転操作に対応しているとみなすことができます。

 


SU(2) Lie代数

さて、 SU(2)(2次特殊ユニタリ群)の作用は回転操作のようなものなので、

単位元(何もしない操作に対応する)のまわりでの無限小の展開(微小な回転)

 U_{\varepsilon}=I_2+i\varepsilon\Sigma

を考えてみましょう。ここで  \varepsilon は無限小の実数パラメータとします。

 U_{\varepsilon} がユニタリ行列であるための条件  U_{\varepsilon}U_{\varepsilon}^\dagger=I_2 より

 I_2=(I_2+i\varepsilon\Sigma)(I_2-i\varepsilon\Sigma^\dagger)=I_2+i\varepsilon(\Sigma-\Sigma^\dagger)+\mathcal{O}(\varepsilon^2)

したがって

 \Sigma^\dagger=\Sigma

です。さらに行列式の条件  \det U_{\varepsilon}=1 より

 \displaystyle{\det U_{\varepsilon}=\left|\begin{array}{cc} 1+i\varepsilon \Sigma_{11} & i\varepsilon \Sigma_{12} \\ i\varepsilon \Sigma_{21} & 1+i\varepsilon \Sigma_{22} \end{array} \right|=1+i\varepsilon (\Sigma_{11}+\Sigma_{22}) +\mathcal{O}(\varepsilon^2)}

から

 \text{tr}\,\Sigma=0

が課されます。これらの条件をみたす行列の基底としてよく使われるのがPauli行列

 \displaystyle{\sigma_1=\left(\begin{array}{cc} 0 & 1 \\ 1 & 0 \end{array} \right) \quad \sigma_2=\left(\begin{array}{cc} 0 & -i \\ i & 0 \end{array} \right)\quad \sigma_3=\left(\begin{array}{cc} 1 & 0 \\ 0 & -1 \end{array} \right)}

です。


これらは代数関係

 [\sigma_i,\sigma_j]=\sigma_i\sigma_j-\sigma_j\sigma_i=2i\epsilon_{ijk}\sigma_k

をみたします。

ここで添え字  k については 1 から 3 までの和をとっているものと約束します。

この約束はアインシュタインの規約ともよばれます。

また

 \epsilon_{ijk}

はLevi-Civita記号(エディントンのイプシロンとも)というもので、

添え字の入れ替えのもとで符号を変える完全反対称テンソルです。具体的には

 1=\epsilon_{123}=\epsilon_{231}=\epsilon_{312}=-\epsilon_{213}=-\epsilon_{132}=-\epsilon_{321}

で、その他の場合はすべてゼロとなる量です。

 


さいごにこの代数関係が正しいかどうか、Maximaで計算チェックしてみたいと思います:

s[1]:matrix([0,1],[1,0])$
s[2]:matrix([0,-%i],[%i,0])$
s[3]:matrix([1,0],[0,-1])$
c[i,j]:= s[i].s[j] - s[j].s[i]$
load("itensor")$   /* 組み込み関数 levi_civita を使うためにパッケージ"itensor"を読み込んでいます */
alg[i,j]:= c[i,j] - 2*%i*sum( levi_civita([i,j,k])*s[k], k, 1, 3)$
alg[1,2];
alg[2,3];
alg[3,1];
alg[1,1];

以上より、確かにPauli行列に対して上の代数関係が成り立っていることがわかります。


この代数関係は、3次元空間回転の群( SO(3) )の生成子がなす代数関係と同じであり、

上で述べた SU(2) と空間回転の同一視が、生成子のレベルで成り立つことを確かめたことになります。


行列の固有値固有ベクトル、対角化については以下の記事を参照してください:

pianofisica.hatenablog.com



キーワードMaxima、行列、SU(2)、Pauli行列