フィボナッチ数に基づく格子の基底

  • こちらで、トポロジカル・インデックスのことを書いた
  • その中でフィボナッチ的数列を書いた
  • ここでは「普通のフィボナッチ数列
  • ただし、負の側もある
  • 次の性質を満たす
    • F(-n)=F(n)\times (-1)^(n+1)
    • F(m+1)F(n+1)+F(m)F(n)=F(m+n+1)
    • F(-n)F(n+1)+F(-n-1)F(n)=F(0)=0
    • F(n+1)^2+F(n-1)^2=F(2n)
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)を使って、(\frac{FN(i)}{FN(j)},\frac{FN(k)}{FN(j)})のように作り、それに格子を張らせる
  • 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)

*1:\frac{1}{FN(n)},\frac{FN(n-1)}{FN(n)}),(0,1

*2:\frac{FN(\mu)}{FN(2\mu+1)},-\frac{FN(-\mu-1)}{FN(2\mu+1