- この関数はどういう関数か、というと
- 周期的
- d=2,3,4,...と任意の2以上の自然数の関数の組であって、すべての関数が周期的
- そのすべての関数の位相のずれは、ずつ
- この関数の実数成分は1周期をd等分してそこの範囲で大きな値をとり、残りのの部分は小さな値を取る
- この関数の虚数成分は1周期をd等分してそのそれぞれについて同一の振幅で周期的
- 個々の関数は1周期分を積分すると0(三角関数と同じ)
- 実数成分のピークが隣り合う関数同士はの位相をずらすと、関数内積が1になる。隣り合う関数同市はとずらすと、関数内積は小さく、いずれも同じ値をとる。この性質は、d個の関数をうまい順番に並べると、位相をだけずらして、隣り合う関数の内積をとって和をとると大きな値となり、順番がうまくないと、その和が小さくなる、という性質を持つ
- したがって、この実数成分の特徴が「順序を考慮した周期性」の評価に有用となる(と予想している)ものである
make.circular <- function(v){
ret <- diag(rep(1,length(v)))
ret[v,]
}
simplex.trigonometric.2 <- function(d,t=seq(from=0,to=1,length=1000)){
M <- make.circular(c(2:d,1))
eigen.out <- eigen(M)
V <- eigen.out[[2]]
U <- solve(V)
lambdas <- as.complex(eigen.out[[1]])
L <- d
t <- t*L
ori.X <- c(1,rep(0,d-1))
X <- matrix(0,length(t),d)
for(i in 1:length(t)){
tmp <- V %*% diag(lambdas^t[i]) %*% U
X[i,] <- tmp %*% ori.X
}
Y <- t(t(X)-rep(1/d,d))
tmp <- V %*% diag(lambdas^0) %*% U %*% ori.X
tmp.2 <- tmp-rep(1/d,d)
tmp.im <- V %*% diag(lambdas^((2*d-1)/2)) %*% U %*% ori.X
if(d%%2==0){
Z <- Re(Y)/tmp.2[1] + 1i*Im(Y)/Im(tmp.im[1])
}else{
Z <- Re(Y)/tmp.2[1] + 1i*Im(Y)
}
return(list(Y=Y,Y.st=Z))
}
d <- 4
Y <- simplex.trigonometric.2(d)
par(mfcol=c(1,2))
matplot(cbind(Re(Y$Y),Im(Y$Y)),type="l",col=rep(1:d,2),lty=rep(1:2,each=d))
matplot(cbind(Re(Y$Y.st),Im(Y$Y.st)),type="l",col=rep(1:d,2),lty=rep(1:2,each=d))
par(mfcol=c(1,1))
apply(Y$Y[-1,],2,sum)