- k次元
- 固有値の数がk個
- すべての固有値はノルムが1の複素数だから、k個の角パラメタを用いて
- と表せる
- ノルムが1の複素数k次元ベクトルがk個
- ノルムが1の第j番目の複素数k次元ベクトルは、を満足する実変数と、k個の角変数を用いて
- 上の記事のように、をk-1個の角変数を用いて表せば
- ,ただしと表せて
- 結局と、の、自由度の変数表示となることがわかる
- これは、任意のkxk複素数行列が固有値分解できて(対応が1対1対応である)ことと対応する…?…要確認→対応しない。kxkの複素行列の変数の数はkxkx2だから。
- 上の記事と同様に、しかし、パラメタの扱いを本記事の方式で行っても、もちろん、周期的な動きをもたらす行列が作れる
e.val.theta<-runif(k)*2*pi
e.vec.theta<-matrix(runif(k^2)*2*pi,k,k)
e.vec.psi<-matrix(runif(k*(k-1))*2*pi,k,k-1)
e.vector.norm<-matrix(runif(k*(k-1))*2*pi,k,k-1)
v<-runif(k)
sphereCoords<-function(v){
C<-cos(v)
S<-sin(v)
ret<-c(1,S)
for(i in 1:length(v)){
for(j in i:length(v)){
ret[i]<-ret[i]*C[j]
}
}
return(ret)
}
ret<-sphereCoords(v)
sum(ret^2)
TransitionMat<-function(e.val.theta,e.vec.theta,e.vec.psi){
k<-length(e.val.theta)
S<-diag(complex(real=cos(e.val.theta),imaginary=sin(e.val.theta)))
V<-matrix(0,k,k)
Co<-cos(e.vec.theta)
Si<-sin(e.vec.theta)
Comp<-matrix(complex(real=Co,imaginary=Si),k,k)
for(i in 1:k){
A<-sphereCoords(e.vec.psi[i,])
V[i,]<-A*Comp[i,]
}
return(V%*%S%*%solve(V))
}
m<-TransitionMat(e.val.theta,e.vec.theta,e.vec.psi)
Niter<-100
dseries<-matrix(0,Niter,k)
dseries[1,]<-d.Complex
for(i in 2:Niter){
dseries[i,]<-m%*%dseries[i-1,]
}
tobedrawn<-3
matplot(Re(dseries[,1:tobedrawn]),type="l")