- こちらで、トポロジカル・インデックスのことを書いた
- その中でフィボナッチ的数列を書いた
- ここでは「普通のフィボナッチ数列」
- ただし、負の側もある
- 次の性質を満たす
FN <- function(n){
if(n<0){
return(both.fn.3(-n)*(-1)^(n+1))
}
if(n==0){
return(0)
}else if (n==1 | n==2){
return(1)
}else{
tmp <- rep(0,n)
tmp[1] <- tmp[2] <- 1
for(i in 3:n){
tmp[i] <- tmp[i-1]+tmp[i-2]
}
return(tmp[length(tmp)])
}
}
for(i in 1:100){
m <- sample((-10):10,1)
n <- sample((-10):10,1)
a <- FN(m+1)*FN(n+1)+FN(m)*FN(n)-FN(m+n+1)
print(a)
b <- FN(-m)-FN(m)*(-1)^(m+1)
print(b)
B <- FN(-n)*FN(n+1)+FN(-n-1)*FN(n)
print(B)
}
- 2次元ベクトルをフィボナッチ数FN(n)を使って、のように作り、それに格子を張らせる
- 2つのベクトル[tex:*1]が張る格子と、[tex:*2}),(\frac{FN(\mu+1)}{FN(2\mu+1)},-\frac{FN(-\mu)}{FN(2mu+1)}))]が張る格子は同じ
- 後者の2つのベクトルは相互に直交し長さが同じ
FN <- function(n){
if(n<0){
return(both.fn.3(-n)*(-1)^(n+1))
}
if(n==0){
return(0)
}else if (n==1 | n==2){
return(1)
}else{
tmp <- rep(0,n)
tmp[1] <- tmp[2] <- 1
for(i in 3:n){
tmp[i] <- tmp[i-1]+tmp[i-2]
}
return(tmp[length(tmp)])
}
}
make.lattice <- function(vs,k=5){
n <- length(vs[,1])
K <- expand.grid(rep(list(0:k),n))
X <- matrix(0,length(K[,1]),length(vs[1,]))
for(i in 1:length(X[,1])){
X[i,] <- apply(t(vs) %*% diag(K[i,]),1,sum)
}
X
}
mu <- sample(1:10,1)
vs2 <- rbind(c(FN(mu),-FN(-mu-1))/FN(2*mu+1),c(FN(mu+1),-FN(-mu))/FN(2*mu+1))
X2 <- make.lattice(vs2,k=5)
plot(X2)
n <- 2*mu+1
vs <- rbind(c(1,FN(n-1))/FN(n),c(0,1))
X <- make.lattice(vs)
plot(X2,cex=1.5)
points(X,col=2,pch=20,cex=1)
vs2 %*% t(vs2)
- フィボナッチ数の掛け算で回転して重ね合わせることもできる
X.rot <- FN(2*mu-1)*X2
points(jitter(X.rot,0.001),col=3,pch=20,cex=1.25)