2009年2月24日火曜日

クオータニオンまとめ

クオータニオン関連のエントリ(1,2,3,4)がカオスなのでここにまとめる。代数的アプローチでなく、2x2複素行列の部分線形空間によるモデルを用いる具体的方法なので、全てを具体的に計算して確かめる事ができる。複素行列の転置共役を^*と書く。

SU(2)={U|UU^*=I, det(U)=1}の生成元を求める、すなわち、(I+εu)(I+εu)^*=I, det(I+εu)=1が一次近似で満たされるためのUの条件を求める。それは、u=-u^*かつTr(u)=0。このようなuの全体は、

J=[i, 0]
[0,-i]

K=[ 0,1]
[-1,0]

L=[0,i]
[i,0]

で張られる実数係数線形空間となる。イメージとしてはSU(2)のIから``遠い''要素をIから``近い''要素I+xJ+yK+zL(x,y,zは小さい)の複数個の積によって作る事ができる。唯一つの生成元xJ+yK+zLのみを用いた積(I+ε(xJ+yK+zL))^(t/εくらいの整数)は、極限として、xJ+yK+zLの指数関数exp(t(xJ+yK+zL))を与える。xJ+yK+zLは有限次元でしかも対角化可能だから、指数関数と言う場合、対角化に基づく定義でもテイラー級数による定義でも良い。

あるいは、exp(t(xJ+yK+zL))という表式は生成元により次々とSU(2)の要素を生成していった結果に加法的にパラメタ付けした結果としてシンボリックなものと捉えても良い。つまりそれはexp(0(xJ+yK+zL))=I, (I+ε(xJ+yK+zL))exp(t(xJ+yK+zL))=exp((t+ε)(xJ+yK+zL))で特徴付けられる。この特徴づけから、極限に関する議論をうっちゃれば、exp(t(xJ+yK+zL))=(I+ε(xJ+yK+zL))^(t/εくらいの整数)が分かるので、指数法則exp(t(xJ+yK+zL))exp(s(xJ+yK+zL))=exp((t+s)(xJ+yK+zL))が得られ、指数関数のシンボルを使う事は正当化される。

なお、逆にSU(2)の要素も対角化可能なので、必ず、適当な生成元の指数関数で書けると分かる。


J^2=K^2=L^2=-I, JK=Lなどにより、I, J, K, Lが張る実数係数線形空間Mの中で積は閉じる。Mの要素をクオータニオンと呼ぼう。Mは、積について閉じているからとりあえずOが零でIが単位元である代数だ。

Mが積について閉じている事から直ちに次の事が言える。(I+ε(xJ+yK+zL))^(t/ε)の展開項、あるいはexp(t(xJ+yK+zL))のテイラー展開項のいずれもI, J, K, Lの種々の積に実数を乗じた形になっているために、exp(t(xJ+yK+zL))はI, J, K, Lの実数係数の線形結合で書ける。つまり、SU(2)はMに含まれる。

#Mは有限次元線形空間の部分空間だから当然閉じているので、収束する級数の部分和がその上にあれば、極限もその上にある。

Mが転置共役についても閉じている事、Mの要素たるクオータニオンとその転置共役との積が(wI+xJ+yK+zL)(wI+xJ+yK+zL)^*=(w^2+x^2+y^2+z^2)Iという風に数ベクトルとしての通常のノルムの二乗をIに乗じた結果を与える事に気が付けば、零行列でないクオータニオンに対して逆行列を作る公式を簡単に書け、しかもその結果はMの中に入る。Mは体であり、wI+xJ+yK+zLに対する共役をwI-xJ-yK-zLと、ノルムの二乗をw^2+x^2+y^2+z^2と定義すれば、逆数は共役/ノルムの二乗で与えられる。


exp(t(xJ+yK+zL))=a0(t)I+a1(t)J+a2(t)K+a3(t)L

と書いてSU(2)の生成元の指数関数のクオータニオンとしての形を具体的に求めよう。素朴なイメージとしては、(I+δt(xJ+yK+zL))を用いて、パラメタtをδtだけ進めていく事で、単位行列から近いexp(t(xJ+yK+zL))から次第に遠いexp(t(xJ+yK+zL))まで次々と求めていく事ができる。このイメージの数学的な対応は

(I+δt(xJ+yK+zL))(a0(t)I+a1(t)I+a2(t)J+a3(t)K)
=a0(t+δt)I+a1(t+δt)J+a2(t+δt)K+a3(t+δt)L ... (1)

から導かれる微分方程式を、a0(0)=1, a1(0)=a2(0)=a3(0)=0の下で解く事だ。

以下(x,y,z)をベクトルωで表し、(a1(t),a2(t),a3(t))をベクトルα(t)で表す事にする(ベクトルを明示するうまい方法がないのでここでだけギリシャ文字はベクトルを表すことにする)。しばしばtをオミットする。

(1)式から得られる解くべき微分方程式は

da0/dt=-ω・α...(2)
dα/dt=a0ω+ω×α...(3)

だ。左辺にそれぞれa0, a1, a2, a3を乗じて足しあげると0となる。これはa0^2+a1^2+a2^2+a3^2が不変である事を表す。t=0ではa0=1で他は0だから、連続性も考慮して、a0=sqrt(1-|α|^2)と書ける事が分かる。後はαの各成分だけ求めれば良い。αの微分方程式は今や

dα/dt=sqrt(1-|α|^2)ω+ω×α ... (4)

である。左からωを外積すると右辺第一項が消えて

d(ω×α)/dt=ω×(ω×α)...(5)

右辺はω×αに直交するから、|ω×α|は保存する。その値は初期条件から0である。とすれば、ω×αは零ベクトルである。この結果は保存則二つ分の情報を齎す。すなわち、αはωに比例し、解かれるべきパラメタとして比例係数のみが残る。α=f(t)ωとおくと、解かれるべき微分方程式は

f(0)=0,
df/dt=sqrt(1-f^2|ω|^2)...(6)

である。解はf(t)=|ω|^(-1)sin|ω|tである。結局、

exp(t(xJ+yK+zL))=cos(sqrt(x^2+y^2+z^2)t)
+sin(sqrt(x^2+y^2+z^2)t)(xJ+yK+zL)/sqrt(x^2+y^2+z^2)...(7)

が得られる。これはノルム1のクオータニオンで、逆にノルム1のクオータニオンは必ずこの形に書ける。つまりSU(2)の要素はノルム1のクオータニオンで逆もまたしかりだ。


最後に、x^2+y^2+z^2=1であるとして、純虚クオータニオンV=aJ+bK+cLを三次元ベクトルvと同一視した時に、(I+ε(xJ+yK+zL))V(I-ε(xJ+yK+zL))が、三次元ベクトルをω=(x,y,z)軸周りにだけ回転させる微小変換である事を示せば良い。つまり、vをv+2εω×vに写す事を言う。これでexp(t/2(xI+yJ+zK))とその共役で三次元空間ベクトルと同一視した純虚クオータニオンを挟む形の変換が三次元空間上の(x,y,z)軸周り角度tの回転変換として用いる事ができると分かる。

#この偶然に見える結果は、SU(2)とSO(3)の群としての2対1の対応関係に因っている。つまり、ベースとなっている事実は、|(x,y,z)|=1とした時SU(2)の要素exp(s(aJ+bK+cL))を((a,b,c)は必ずしも規格化されていなくてよい)別のSU(2)の要素によってユニタリ変換した結果exp(t(xJ+yK+zL))exp(s(aJ+bK+cL))exp(-t(xJ+yK+zL))が、``角速度ベクトル''(a,b,c)を右手系における右ネジ回転を基準として、(x,y,z)を軸として角2tだけ回転させるという事実だ。一般の3次元空間ベクトルも、純虚四元数と対応させてこの事実を流用すれば、回転を実行できるというわけだ。こうしてようやく、ベクトルを回転させる公式がクオータニオンとその共役で純虚クオータニオンを挟む形になっている事の奇妙さが解消される。ベクトルを直接回転しているのではなく、回転変換を別の回転変換とその逆変換で挟む``回転変換の回転変換''において``回転軸が回転される''事実が流用されているのだ。

なお、(x,y,z)が正規化されていない場合、(7)より、exp(t/2(xI+yJ+zK))は「角速度|(x,y,z)|で時間tだけ行った回転」と簡単に表現する事ができる。ただし、.NET Frameworkのクオータニオンのコンストラクタは軸ベクトルを無理やり正規化するので、軸ベクトルの代わりに角速度ベクトルを与えるという使い方はできない。これはMSDNでドキュメント化されていないので注意が必要だ。