Lie 群であって、代数である

  • 参考サイト1
  • 参考サイト2
  • 注意。こんがらがってしまった諸々を整理するために、思い切って枝葉を取っ払い、無理やり短く説明しやすくする。とにかく「Lie群・代数ってこういうこと」と3分くらいで言える内容にまとめることを目標にする。3分ができたら、後は気になる点についてを増改築しても、建物は壊れないから。
  • リーの言葉的な説明
    • 空間の構造が対称であることを、行列を使って表現したもの
    • あるリー群の要素たち(行列)は積で滑らかにつながっていて、それが空間における「形」に相当する
    • 行列の積が滑らかにつながるとき、それは指数行列になる
  • リーにリー群とリー代数リー環との呼び名があること
    • リーの要素は積でつながっていて閉じているので、(リー)群
    • リーは指数行列を使って表現できるが、その行列たちはある二項演算を使って相互に結び付けられているので、(リー)代数。たとえば、\wedgeという演算が外積「代数」を作るように
    • リーの代数が使う二項演算は、行列の乗法と加法とを使う形をしている(AB-BA)。乗法と加法とを備えたものは「環」なので、(リー)環。
    • 以上、3つの呼び名「リー群」「リー代数」「リー環」があるが、それぞれ「リー」のある側面に着目して呼んでみたものであって、『リー(群/代数/環)』のように『リーとは何か』を考えるときにはひとまとめにしておいてもよい
  • リーの定義式
    • リーの定義は2通りでできる
    • 2通りの定義は、相互に書き方が違うだけで、同じこと(であることは証明できるけれど、それをすると整理が悪くなるから、できるとだけ覚える)
      • どちらの定義も行列を使う
      • 1つ目は、指数行列での定義(指数行列が出てくるのは、積で滑らかにつながるため)
      • 2つ目は、代数・演算的な結びつきでの定義
    • リーの定義式
      • リーの要素である行列はe^{\sum_{k}\theta_k T_k}と表せる。こんな風に書けるT_kのセットがとれて、それが群になっている、ということがリー群の定義
      • リーの要素を表すのに用いた行列T_iは、T_a T_b - T_b T_a = i \sum_k f(k,(a,b)) T_kというようにa,b,kで決まる定数f(k,(a,b))を使って表せる。T_aT_b - T_bT_aが出てきたが、行列積が順序の入れ替えによって異なる、その差分が効いていることを示す式
  • 具体例
    • この具体例として初登場させるものが、大事。それなりに簡単で、それなりに意味が解るものを取る
    • 今、興味があるのは空間移動や変形なので、二次元平面上の剛体の移動を表す行列を例にとる
    • 参考3
    • 剛体の運動は平行移動と回転
      • \begin{pmatrix}\cos{\theta} & -\sin{\theta} & x \\ \sin{\theta} & \cos{\theta} & y \\ 0 & 0 & 1 \end{pmatrix}\theta回転して平行移動(x,y)する、という動きを表す
    • 今、\theta_i回転して(x_i,y_i)の平行移動をする行列をM_iとし、
    • M_1してからM_2することを考える。行列で表せばM_3=M_2 M_1をベクトルに作用させること
    • このM_3を一つの移動と考えたときに、\theta_3,(x_3,y_3)で表される動きとして、どういう風に行列で表されるかを考えたい
    • もちろんM_2 M_1という行列の積を計算してもよいけれど、そうすると、どれくらい平行移動して、どれくらい回転したのかが、すぐにはわからない
# V=c(theta,x,y) でthetaの回転と平行移動(x,y)とを表す行列を作る
my.rigid.move.2 <- function(V){
	theta <- V[1]
	x <- V[2]
	y <- V[3]
	matrix(c(cos(theta),-sin(theta),x,sin(theta),cos(theta),y,0,0,1),byrow=TRUE,3,3)
}
V1 <- c(pi/3,1,2)
V2 <- c(pi/4,2,3)

M1 <- my.rigid.move.2(V1)
M2 <- my.rigid.move.2(V2)

M3 <- M2 %*% M1
    • このM3を見ると以下のようになって、並行移動分は、第3列を見て(1.292893,5.121320)とわかるが、回転角は、2x2行列をthetaに戻さないといけない(できるけれど面倒くさい)
> M3
           [,1]       [,2]     [,3]
[1,] -0.2588190 -0.9659258 1.292893
[2,]  0.9659258 -0.2588190 5.121320
[3,]  0.0000000  0.0000000 1.000000
    • ここで(\theta_1,x_1,y_1)(\theta_2,x_2,y_2)という長さ3のベクトル2つから、直接、M3の(\theta_3,x_3,y_3)が計算できると便利かもしれない
    • 実際、その計算は\theta_3=\theta_1+\theta_2,x_3 = x_1 \cos{\theta_2} - y_1 \sin{\theta_2} + x_2,y_3 = x_1\sin{\theta_2} + y_1 \cos{\theta_2} + y_2という関係式になっている
# V1,V2と引数を与えてM1%*%M2を計算させるか
# V1,V2と引数を与えてM2%*%M1を計算させるかの2通りを作っておく
my.rg.prod <- function(V1,V2){
	w1 <- V1[1]+V2[1]
	w2 <- V2[2]*cos(V1[1])-V2[3]*sin(V1[1])+V1[2]
	w3 <- V2[2]*sin(V1[1])+V2[3]*cos(V1[1])+V1[3]
	c(w1,w2,w3)
}
my.rg.prod.2 <- function(V1,V2){
	my.rg.prod(V2,V1)
}
    • こうしてやると、確かに、(\theta_3,x_3,y_3)を計算して、それに相当する行列を作ると、二つの行列の積になっているし、(\theta_3,x_3,y_3)がわかっているから、並行移動ベクトルも回転角も陽に得られている
V3 <- my.rg.prod.2(V1,V2)
V3
M3. <- my.rigid.move.2(V3)
M3
M3.
M3 - M3.
    • リー群の要素行列は指数行列で表せるという話はどうなるかというと
      • 基本構成行列をまず作る。今、変数の数は3つあるから、3個の行列を用意する
E1 <- E2 <- E3 <- matrix(0,3,3)
E1[1,3] <- E2[2,3] <- E3[2,1] <- 1
E3[1,2] <- -1
E1
E2
E3
    • 一つは純粋な回転(90度)の行列、もう二つは平行移動用
> E1
     [,1] [,2] [,3]
[1,]    0    0    1
[2,]    0    0    0
[3,]    0    0    0
> E2
     [,1] [,2] [,3]
[1,]    0    0    0
[2,]    0    0    1
[3,]    0    0    0
> E3
     [,1] [,2] [,3]
[1,]    0   -1    0
[2,]    1    0    0
[3,]    0    0    0
    • 今、\theta,x,yのx,yのことは忘れて\theta,u,vという3変数を考える
    • その上でe^{uE_1+vE_2+\theta E_3}なる指数行列を作ってみよう
library(Matrix) # expm()を使うため
theta <- pi/4
u <- 2
v <- -3
expm(u*E1 + v*E2 + theta* E3)
    • その結果は、回転行列(theta回転)の2x2行列部分と、並行移動部分とを指定した形になっている。この並行移動は2.919402,-1.955102で、この並行移動成分を\theta,u,vが定めており、x,y並行移動との関係は関数で表せるが、ちょっと面倒なので省略するが、大事なのは、\theta,x,yに対応する3変数(\theta,u,v)があって、それと、ある行列セットとを使った線形結合の指数行列が、このリー群の要素の行列表現を与えること
> expm(u*E1 + v*E2 + theta* E3)
3 x 3 Matrix of class "dgeMatrix"
          [,1]       [,2]      [,3]
[1,] 0.7071068 -0.7071068  2.919402
[2,] 0.7071068  0.7071068 -1.955102
[3,] 0.0000000  0.0000000  1.000000
    • e^{u E_1 + v E_2} e^{\theta E_3}としてみよう
expm(u*E1 + v*E2 ) %*% expm( theta* E3)
    • こうするとx=u,y=vとなっている。e^{x E_1 + y E_2}で表されるリー群とe^{\theta E_3}で表されるリー群とがあって、その指数行列レベルでの積で表せている。
    • これは、u,vの取り方を変えた(パラメタ表現を変えた)ことに相当するけれど、本質としての「二次元平面での剛体の移動」は変わっていない。使いやすいものを使えばよい
> theta <- pi/4
> u <- 2
> v <- -3
> expm(u*E1 + v*E2 ) %*% expm( theta* E3)
3 x 3 Matrix of class "dgeMatrix"
          [,1]       [,2] [,3]
[1,] 0.7071068 -0.7071068    2
[2,] 0.7071068  0.7071068   -3
[3,] 0.0000000  0.0000000    1
  • 指数行列と対数行列とでリー群とリー代数とを結ぶ
    • リー群の要素は、行列の線形和の指数行列で表せる。G_i = e^{\sum_i \beta_i E_i}=e^{K_i}とする
    • このときK_iリー代数の要素になっている。このK_iはリー群の要素の対数行列K_i = \log{G_i}となっている
library(expm)
# expm()は指数行列の関数
# logm()は対数行列の関数
# 処理が見えるように自作
log.m <- function(A,n=1,eigen=FALSE){
  # 固有値分解
	eigen.out<-eigen(A)
	# P=V,P^{-1}=U
	V<-eigen.out[[2]]
	U<-solve(V)
	B<-diag(log((0*1i+eigen.out[[1]])*n)) # ここがlog()
	X <- V%*%B%*%U
	if(eigen){
		return(list(matrix = X, eigen.vs = eigen.out[[1]]))
	}else{
		return(X)
	}
}
G <- V1[2] * E1 + V1[3] * E2 + V1[1] * E3
K <- expm(G)
G
round(logm(K),5)
> G
         [,1]      [,2] [,3]
[1,] 0.000000 -1.047198    1
[2,] 1.047198  0.000000    2
[3,] 0.000000  0.000000    0
> round(log.m(K),5)
          [,1]       [,2] [,3]
[1,] 0.0000+0i -1.0472+0i 1+0i
[2,] 1.0472+0i  0.0000+0i 2+0i
[3,] 0.0000+0i  0.0000+0i 0+0i
  • さて、ここまで書いたところで確率過程のLie群について確認してみる(こちら)