- 前の記事(こちら)で、置換行列の実数乗を考えて、「元に戻る回転」を複合的に作った
- 実際は、このようにして作った回転の軌跡は、実空間に納まっている場合と虚空間を使っている場合とがある
- 実空間を使って回れるのは、「軸数が奇数」の場合で、「軸数が偶数」の場合は、居空間を使う
- 簡単な例を考えよう
- 軸数が2で、(1,0)->(0,1),(0,1)->(1,0)と言う交代・置換のとき、2次元空間で、これを連続的に行おうとすると、「途中経過」では2軸をどこに置いたらよいのか、困る。イメージするなら、3次元空間を使ってくるりと回らせるようなことになる。この2軸を3次元で回す、ということが「虚空間」を使うということ
- 軸数が3の場合はどうだろう。(1,0,0)->(0,1,0)->(0,0,1)->(1,0,0)というようなやりとりだと、くるくる回っている姿が想像できる
- 確かに、軸数の偶奇で軌跡の虚数部があるかないかを次のようにして、確かめてみることができる
- 奇数のときには軌跡座標の虚部が0(ただし、奇数軸のすべてで巡回すること)
- この話は、「奇数次元での回転」にはへそがあり、「偶数次元での回転」にはへそがないこととつながる話(こちら)
- 軸数が奇数のとき、軸を置換する回転は、実空間での回転として定義できて、それは、正規直交基底の先端が作るディリクレな部分空間(次元が1つ小さい空間)での回転に関する話。この部分空間の次元は偶数で、このような「偶数次元空間」ではうまい回転がある
- 軸数が偶数のときは、1次元小さい部分空間(この空間は奇数次元空間)にうまい回転がない。うまい回転はないので、1次元を「へそ」にして、残りの次元(偶数)の回転が作れる
ks<-2:15
maxIm<-rep(0,length(ks))
for(ik in 1:length(ks)){
k<-ks[ik]
M<-diag(rep(1,k))
n<-1
T<-list()
for(i in 1:n){
T[[i]]<-M[c(2:k,1),]
}
how.many.times<-sample(2:10,n,replace=TRUE)
S<-list()
V<-list()
U<-list()
for(i in 1:n){
tmp<-T[[i]]
e.out<-eigen(tmp)
S[[i]]<-e.out$values
V[[i]]<-e.out$vectors
U[[i]]<-solve(V[[i]])
}
z<-prod(how.many.times)*factorial(k)
t<-seq(from=0,to=100,length=1000)
t<-c(t,z)
x<-runif(k)*100
Niter<-length(t)
X<-matrix(0,Niter,k)
for(i in 1:length(t)){
tmpx<-x
for(j in 1:n){
tmpx<-V[[j]]%*%diag((S[[j]]+complex(0,0))^(t[i]/how.many.times[j]))%*%U[[j]]%*%tmpx
}
X[i,]<-tmpx
}
matplot(Re(X),type="l")
plot(as.data.frame(X))
library(rgl)
X[1,]-X[length(t),]
for(i in 1:n){
print(V[[j]]%*%diag((S[[j]]+complex(0,0))^(z/how.many.times[j]))%*%U[[j]])
}
maxIm[ik]<-max(apply(Im(X),2,max))
S
T
}
plot(ks,maxIm,type="b")