mirror of
https://github.com/kalmarek/SmallHyperbolic
synced 2024-11-12 12:50:29 +01:00
add eigenvalues computations
This commit is contained in:
parent
d781aa46a9
commit
44339f91f0
127
adj_psl2_eigvals.jl
Normal file
127
adj_psl2_eigvals.jl
Normal file
@ -0,0 +1,127 @@
|
||||
using RamanujanGraphs
|
||||
using LinearAlgebra
|
||||
using Nemo
|
||||
|
||||
include("src/nemo_utils.jl")
|
||||
|
||||
const p = try
|
||||
@assert length(ARGS) == 2 && ARGS[1] == "-p"
|
||||
p = parse(Int, ARGS[2])
|
||||
RamanujanGraphs.Primes.isprime(p)
|
||||
@assert p % 4 == 1
|
||||
catch ex
|
||||
@error "You need to provide a prime `-p` which is congruent to 1 mod 4."
|
||||
rethrow(ex)
|
||||
end
|
||||
|
||||
const CC = AcbField(256)
|
||||
|
||||
SL2p = let
|
||||
if p == 109
|
||||
a,b = let
|
||||
a = SL₂{p}([ 0 1; 108 11])
|
||||
b = SL₂{p}([57 2; 52 42])
|
||||
@assert isone(a^10)
|
||||
@assert isone(b^10)
|
||||
|
||||
a, b
|
||||
end
|
||||
elseif p == 131
|
||||
a,b = let
|
||||
a = SL₂{p}([-58 -24; -58 46])
|
||||
b = SL₂{p}([0 -3; 44 -12])
|
||||
@assert isone(a^10)
|
||||
@assert isone(b^10)
|
||||
|
||||
a, b
|
||||
end
|
||||
else
|
||||
@warn "no special set of generators for prime $p"
|
||||
a,b = let
|
||||
a = SL₂{p}(1, 0, 1, 1)
|
||||
b = SL₂{p}(1, 1, 0, 1)
|
||||
a, b
|
||||
end
|
||||
end
|
||||
|
||||
E, sizes = RamanujanGraphs.generate_balls([a,b, inv(a), inv(b)], radius=21);
|
||||
@assert sizes[end] == RamanujanGraphs.order(SL₂{p})
|
||||
E
|
||||
end
|
||||
|
||||
let Borel_cosets = Bcosets = RamanujanGraphs.CosetDecomposition(SL2p, Borel(SL₂{p})),
|
||||
α = RamanujanGraphs.generator(RamanujanGraphs.GF{p}(0))
|
||||
|
||||
for j in 0:(p-1)÷4
|
||||
try
|
||||
h = PrincipalRepr(
|
||||
α => root_of_unity(CC, (p-1)÷2, j),
|
||||
Borel_cosets)
|
||||
|
||||
@time adjacency = let
|
||||
A = matrix(CC, h(SL2p[2]))
|
||||
B = matrix(CC, h(SL2p[3]))
|
||||
sum(A^i for i in 1:4) + sum(B^i for i in 1:4)
|
||||
end
|
||||
|
||||
@time ev = let evs = safe_eigvals(adjacency)
|
||||
_count_multiplicites(evs)
|
||||
end
|
||||
if length(ev) == 1
|
||||
@info "Principal Series Representation $j" ev[1]
|
||||
else
|
||||
@info "Principal Series Representation $j" ev[1:2] ev[end]
|
||||
end
|
||||
catch ex
|
||||
@error "Principal Series Representation $j failed" ex
|
||||
ex isa InterruptException && rethrow(ex)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
let α = RamanujanGraphs.generator(RamanujanGraphs.GF{p}(0)),
|
||||
β = RamanujanGraphs.generator_min(QuadraticExt(α))
|
||||
for j = 1:(p-1)÷4
|
||||
try
|
||||
h = DiscreteRepr(
|
||||
RamanujanGraphs.GF{p}(1) => root_of_unity(CC, p),
|
||||
β => root_of_unity(CC, (p+1)÷2, j*(p-1)÷4))
|
||||
|
||||
@time adjacency = let
|
||||
A = matrix(CC, h(SL2p[2]))
|
||||
B = matrix(CC, h(SL2p[3]))
|
||||
sum(A^i for i in 1:4) + sum(B^i for i in 1:4)
|
||||
end
|
||||
|
||||
@time ev = let evs = safe_eigvals(adjacency)
|
||||
_count_multiplicites(evs)
|
||||
end
|
||||
|
||||
@info "Discrete Series Representation $j" ev[1:2] ev[end]
|
||||
catch ex
|
||||
@error "Discrete Series Representation $j : failed" ex
|
||||
ex isa InterruptException && rethrow(ex)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
# using RamanujanGraphs.LightGraphs
|
||||
# using Arpack
|
||||
#
|
||||
# Γ, eigenvalues = let q = 109
|
||||
# a = RamanujanGraphs.PSL₂{q}([ 0 1
|
||||
# 108 11])
|
||||
# b = RamanujanGraphs.PSL₂{q}([57 2
|
||||
# 52 42])
|
||||
#
|
||||
# S = unique([[a^i for i in 1:4]; [b^i for i in 1:4]])
|
||||
#
|
||||
# @info "Generating set S of $(eltype(S))" S
|
||||
# @time Γ, verts, vlabels, elabels = RamanujanGraphs.cayley_graph((q^3 - q)÷2, S)
|
||||
# @assert all(LightGraphs.degree(Γ,i) == length(S) for i in vertices(Γ))
|
||||
# A = adjacency_matrix(Γ)
|
||||
# @time eigenvalues, _ = eigs(A, nev=5)
|
||||
# @show Γ eigenvalues
|
||||
# Γ, eigenvalues
|
||||
# end
|
Loading…
Reference in New Issue
Block a user