ぱらぱらめくる『キーポイント 行列と変換群』
キーポイント行列と変換群 (理工系数学のキーポイント (8))
- 作者: 梁成吉
- 出版社/メーカー: 岩波書店
- 発売日: 1996/11/25
- メディア: 単行本
- クリック: 4回
- この商品を含むブログ (5件) を見る
- 作者: ryamada
- 発売日: 2014/12/10
- メディア: Kindle版
- この商品を含むブログ (1件) を見る
- 目次
- Rでなぞる
- ベクトルを回転してみよう、行列は回転を引き起こす
## 実二次元ベクトルを扱う
### 基本演算
ベクトルは値の組。
ベクトルの和、ベクトルの定数倍。
x <- c(1,2) y <- c(3,4) x+y a <- 3 a *x
### 内積
ベクトルに内積を定義する。
要素同士の積の和として定義してもよいし、2つのベクトルを行列とみなして、その片方の転置と積とみなしてもよい。
my.ip.v <- function(x,y){ #sum(x*y) t(x)%*%y } my.ip.v(x,y)
my.norm <- function(x){ sqrt(my.ip.v(x,x)) } my.norm(x)
### 回転
回転行列を作る。
my.2d.rot <- function(theta){ matrix(c(cos(theta),sin(theta),-sin(theta),cos(theta)),2,2) } theta <- runif(1)*2*pi rot <- my.2d.rot(theta) x.rot <- rot %*% x y.rot <- rot %*% y
### 内積は回転で不変
my.ip.v(x,y) my.ip.v(x.rot,y.rot)
### 外積
2次元ベクトルの外積はdetereminant
det(cbind(x,y))
lこれも回転で不変。
det(cbind(x.rot,y.rot))
## 回転行列
### 回転行列の性質
回転行列のdetermintは1。
回転行列の転置は逆行列。
thetas <- runif(3) rots <- list() for(i in 1:length(thetas)){ rots[[i]] <- my.2d.rot(thetas[i]) } lapply(rots,det) ts <- lapply(rots,t) for(i in 1:length(thetas)){ print(rots[[i]] %*% ts[[i]]) }
### 回転行列の積は回転行列〜回転群〜
結合則。
(rots[[1]] %*% rots[[2]]) %*% rots[[3]] rots[[1]] %*% (rots[[2]]) %*% rots[[3]]
単位元。
rots.e <- diag(rep(1,2)) rots.e %*% rots[[1]] rots[[1]] %*% rots.e
逆元は、逆行列。
lapply(rots,solve) # または、転置行列 lapply(rots,t)
## 2次元ベクトルと複素数
### 実部と虚部
2次元ベクトルの2つの要素を複素数の実部と虚部とみることにする。
zx <- x[1] + 1i * x[2] zy <- y[1] + 1i * y[2]
和と実定数倍はベクトルの場合と同じ。
x + y zx + zy x * y[1] zx * Re(zy)
### 内積と共役複素数
ベクトルの内積はちょっと違う。
ベクトルの内積を計算するには、共役複素数を持ち出す必要がある。
zx. <- Conj(zx)
ベクトルの内積は
my.complex.ip <- function(zx,zy){ 1/2*(zx * Conj(zy) + Conj(zx) * zy) } my.complex.ip(zx,zy) my.ip.v(x,y)
### 回転とは複素数をかけること
回転行列は
thetas <- runif(3) rots <- list() for(i in 1:length(thetas)){ rots[[i]] <- my.2d.rot(thetas[i]) }
これに対応する複素数がある。
rots.z <- list() for(i in 1:length(thetas)){ rots.z[[i]] <- exp(1i*thetas[i]) } for(i in 1:length(thetas)){ print(rots[[i]] %*% x) print(rots.z[[i]] * zx) }
2次元ベクトルの2要素を複素数の実部と虚部に対応付けるのが、「実2次元ベクトルの複素数化」。
他方、回転行列の作用を、複素数の積に対応付けるときは$e^{i\theta}$を$\theta$回転を表す2x2行列に対応付けるわけなので、$1+i\times 0$と、純虚数$i$に対応するのは、
matrix(c(1,0,0,1),2,2) matrix(c(0,-1,1,0),2,2)
### 2次元回転はSO(2)でありU(1)でもある
2次元の回転を2x2行列で表せば、determinantが1である直交行列であった。それをSO(2) : determinantが1であるという特殊性(special)を持つ直交(Orthogonal)な次元2の群、と言う。
他方、複素数を用いると、$e^{i\theta}$と表せて、これを複素数を要素とする1x1ユニタリ行列とみることで、この群をU(1)と書く。ちなみに、ユニタリ行列とは『共役転置行列と逆行列が等しい行列』のこと。
言い換えると、2次元平面にある単位円に、2x2実行列と、1x1複素行列との二つの見方がある、ということ。
これを、3次元空間の単位球面に一般化していきましょう、というのが、この文書の狙い。