- グラフのゼータ関数の逆数は、整数係数多項式であることが知られている
- 無向グラフのエッジを2本の相互に逆向きのエッジに切り替え、そのうえで、その有向エッジをたどることで、Closed backtrackless tailess primitive paths (CBTPP)というのが出来たなら、それらすべてについてというのがゼータ関数の逆数
- 今、はサイクルの長さなのだが、グラフのエッジの長さが整数であるなら、ゼータ関数の逆数は整数係数多項式であることになる
- グラフのゼータ関数の値は、行列式を使って出すことができ、ゼータ関数の逆数に出てくるuの最大次数はグラフのエッジ数の2倍であることもわかっているから、適当にゼータ関数の値を発生させれば、整数係数が連立方程式で算出できる
- やってみる
library(igraph)
el <- rbind(c(1,2),c(2,3),c(3,1),c(1,4))
g <- graph.edgelist(el,directed =FALSE)
plot(g)
my.bigraph <- function(g){
el <- as_edgelist(g)
el2 <- rbind(el,cbind(el[,2],el[,1]))
ret <- graph.edgelist(el2)
return(ret)
}
g.bi <- my.bigraph(g)
plot(g.bi,edge.label=1:8,edge.curved=TRUE)
my.WE <- function(g){
el <- as_edgelist(g)
n.e <- length(el[,1])
edge.mat <- matrix(0,n.e,n.e)
for(i in 1:n.e){
st <- el[i,1]
ed <- el[i,2]
tmp <- which(el[,1]==ed & el[,2]!=st)
edge.mat[i,tmp] <- 1
}
return(edge.mat)
}
WE <- my.WE(g.bi)
WE
WE2 <- WE[,c(2,7,3,4,5,6,1,8)]
WE2
u <- 3
WE2. <- WE2*u
WE2.
IWE2. <- (diag(rep(1,8))-WE*u)[,c(2,7,3,4,5,6,1,8)]
IWE2.
prod(diag(IWE2.))
(-u)^3
library(complexplus)
my.Ihara.zeta.e <- function(g,u){
g.bi <- my.bigraph(g)
we <- my.WE(g.bi)
return(Det(diag(rep(1,length(we[,1]))) - we * u))
}
my.sign <- function(s){
I <- diag(rep(1,length(s)))
return(det(I[,s]))
}
u <- 0.3 + 1i * 0.2
my.Ihara.zeta.e(g,u)
1 + (-u)^3 + (-u)^3 + (-u)^6
el <- rbind(c(1,2),c(2,3),c(3,4),c(4,1))
g <- graph.edgelist(el,directed =FALSE)
plot(g)
g.bi <- my.bigraph(g)
plot(g.bi,edge.label=1:10,edge.curved=TRUE)
WE <- my.WE(g.bi)
WE
u <- 3
WE2. <- WE2*u
WE2.
u <- 0.3 + 1i * 0.2
my.Ihara.zeta.e(g,u)
1 +(-1)* 2*(-u)^4 + (-u)^8
my.Ihara.zeta.poly <- function(g){
n.e <- length(E(g))*2
us <- rnorm(n.e)
U <- matrix(0,n.e,n.e)
for(i in 1:length(us)){
U[i,] <- (-us[i])^(1:n.e)
}
vs <- rep(0,n.e)
for(i in 1:n.e){
vs[i] <- my.Ihara.zeta.e(g,us[i])
}
A <- solve(U) %*% (vs-1)
return(c(1,A))
}
my.Ihara.zeta.poly.calc <- function(g,u){
A <- round(my.Ihara.zeta.poly(g))
v <- sum(A * (-u)^(0:(length(A)-1)))
return(list(v=v,A=A))
}
A <- my.Ihara.zeta.poly(g)
round(A,10)
my.Ihara.zeta.e(g,u)
my.Ihara.zeta.poly.calc(g,u)