- 回転行列による変化が続くとき、2次元の回転では、円を描いて、元に戻るけれど、3次元以上では、元に戻るとは限らない。ある大円では、周期t1で戻ってくるのに、別の大円では周期t2で戻ってきて、t1とt2とが「公倍数」を持たなければ、そうなるだろう
- 周期t1,t2が有理数なら、いつか必ず、元に戻るが、片方が無理数で、相互に公倍数を持たないときには、永遠に巡り会えない、回軌道になる
- そんなことをやってみるために、こんな回転行列を作ってみよう
- きちんと元に戻ってくるような回転を(いくつか定める)
- 戻ってくる回転の周期を決める
- 回転をこのような回転の複合とする
- きちんと元に戻ってくるような回転の例
- 置換行列はせいぜい回の繰り返しによって、元に戻る
> k<-3
> m<-diag(rep(1,k))
> m<-m[sample(1:k),]
> m
[,1] [,2] [,3]
[1,] 0 0 1
[2,] 1 0 0
[3,] 0 1 0
- 戻ってくる周期を定める
- 上のような置換行列に関して、単位時間あたり、有理数乗分の回転をさせることとする
- 回転すると、置換行列と同じ回転ができるから、時間経てば、元に戻る
- これをやってわかったこと
- 3次元空間でこの作業をやると「2次元平面上」を移動するということ…
k<-3
M<-diag(rep(1,k))
n<-5
T<-list()
for(i in 1:n){
T[[i]]<-M[sample(1:k),]
}
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")
library(rgl)
plot3d(Re(X)[,1:3],type="l")
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]])
}