Ask Your Question
1

Eigenvalues of Hecke operators

asked 2018-01-13 11:32:29 +0200

TheBeiram gravatar image

updated 2023-11-24 11:00:36 +0200

FrédéricC gravatar image

For a project I am trying to build a program that computes a basis for cusp forms of weight 2 over $\Gamma_0(N)$. At one point, I want to represent eigenvalues of multiple Hecke operators. For example, (for $N=23$) I have found the following matrices for the Hecke operators: $ T_2=\begin{pmatrix} -2 & -1/2 ; 2 & 1 \end{pmatrix}, T_3=\begin{pmatrix} 3 & 1 ;
-4 & -3 \end{pmatrix} \quad T_5=\begin{pmatrix} -2 & -1/2 ; 2 & 1 \end{pmatrix} \quad $ so we have the following characteristic polynomials $f_2=x^2+x-1$, $f_3=x^2-5$, $f_5=x^2 +2x-4$. Suppose we denote the solution of $f_2$ (eigenvalues of $T_2$) by $a$ and it's conjugate. Then we can denote the solution of $f_3$ by $2a+1$ and of $f_5$ by $2a$. I am trying to figure out how I can 'make' Sage represent these eigenvalues in this way. Say I have found these matrices above, I can create k.< a >=NumberField(x^2+x-1), then $a$ represents the root of the polynomial. So the question for me is, how can I make Sage give me the eigenvalues of $T_3$ and $T_5$ in terms of $a$?

Furthermore, I am wondering how to get the jordan normal form of $T_2$, or eigenmatrix in terms of $a$. If I ask for jordan_form, I get an error, and if I ask for eigenmatrix_right, I only get a numerical expression.

Remark: A little context, the goal for this project is to represent newforms in a similar way as Sage does, when you ask for example Newforms(23,2,names='a'). We need the eigenvalues of the hecke operators since they correspond with the coefficients of the Fourier series.


edit retag flag offensive close merge delete

Comments

1

The Jordan form for $T_2$ is computed if the matrix is defined over a field where the characteristic polynomial of $T_2$ splits in linear factors. The following worked for me:

sage: T2 = matrix( QQ, 2, 2, [ -2,-1/2, 2, 1 ] )
sage: T2.charpoly()
x^2 + x - 1
sage: R.<x> = QQ[]
sage: S.<a> = NumberField( x^2 + x - 1 )
sage: T2 = T2.change_ring( S )    # or T2 = matrix( S, 2, 2, [ -2,-1/2, 2, 1 ] )
sage: T2.jordan_form( transformation=True )
(
[     a|     0]                     
[------+------]  [       1        1]
[     0|-a - 1], [-2*a - 4  2*a - 2]
)
sage:

In the given case it is better - i think - to have full control over the number field used, adjoining a is everything we need. QQbar always works instead of the above S.

dan_fulea gravatar imagedan_fulea ( 2018-01-15 12:54:20 +0200 )edit

1 Answer

Sort by » oldest newest most voted
2

answered 2018-01-14 11:31:45 +0200

dan_fulea gravatar image

I think the following code block - which comes with more prints than computations - gives the answer to the question. I will use the a from above, by asking sage to construct cusp forms over $K$, where $K$ corresponds to the posted K.<a> = NumberField( x^2 + x - 1 ) . (My choice would have been else to work over K.<a> = QuadraticField(5), so that the Galois conjugation is transparent.)

The many prints in the sequel should make the code self-explanatory. This is rather a long answer, but it may be that the short answer, an all it is needed is the "short answer":

Use CF = CuspForms( 23, base_ring=K ) and work in this space of cusp forms.

The longer answer now:

R.<x> = QQ[]
K.<a> = NumberField( x^2 + x - 1 )
print "a has the charpoly:", a.charpoly()
print "a has the galois conjugate:", a.galois_conjugate()

CF = CuspForms( 23, base_ring=K, prec=12 )

print "CF is\n%s\n" % CF
print "A basis of CF is:\n%s\n" % CF.basis()
print "The following Hecke operators Tp have the eigenvalues..."
for p in primes( 20 ):
    Tp = CF.hecke_matrix(p)
    print "T(%s) -> %s" % ( p, Tp.eigenvalues() )

print "The Jordan decomposition for T(2) is T(2) = S J S.inverse() with..."
J, S = T2.jordan_form( transformation=True )
print "J is the matrix:\n%s\n" % J
print "S is the matrix:\n%s\n" % S
print "Test for the equality T(2) = S J S.inverse()..."
print "Is T2 = S J S.inverse()? %s" % bool( T2 == S * J * S.inverse() )
print "The columns of S are giving the base change..."

print "\nLet e1, e2 be the base of CF, where:"
e1, e2 = CF.basis()
print "e1 = %s" % e1
print "e2 = %s" % e2

print "\nLet f1, f2 be the corresponding eigenforms:"
f1, f2 = e1 + a*e2, e1 + a.galois_conjugate()*e2
print "f1 = %s" % f1
print "f2 = %s" % f2

print "\n\nThen we have:"
for p in primes( 20 ):
    for ev in list( set( CF.hecke_matrix(p).eigenvalues() ) ):
        for f in ( f1, f2 ):
            Tp_f = CF.hecke_operator(p)(f)
            if Tp_f == ev*f:
                print ( "%s is an eigenform for T(%s) w.r.t. eigenvalue %s"
                        % ( 'f1' if f==f1 else 'f2', p, ev ) )
    print

This gives:

a has the charpoly: x^2 + x - 1
a has the galois conjugate: -a - 1
CF is
Cuspidal subspace of dimension 2 of Modular Forms space of dimension 3 for Congruence Subgroup Gamma0(23) of weight 2 over Number Field in a with defining polynomial x^2 + x - 1

A basis of CF is:
[
q - q^3 - q^4 - 2*q^6 + 2*q^7 - q^8 + 2*q^9 + 2*q^10 - 4*q^11 + O(q^12),
q^2 - 2*q^3 - q^4 + 2*q^5 + q^6 + 2*q^7 - 2*q^8 - 2*q^10 - 2*q^11 + O(q^12)
]

The following Hecke operators Tp have the eigenvalues...
T(2) -> [a, -a - 1]
T(3) -> [2*a + 1, -2*a - 1]
T(5) -> [2*a, -2*a - 2]
T(7) -> [2*a + 2, -2*a]
T(11) -> [2*a - 2, -2*a - 4]
T(13) -> [3, 3]
T(17) -> [2*a + 4, -2*a + 2]
T(19) -> [-2, -2]
The Jordan decomposition for T(2) is T(2) = S J S.inverse() with...
J is the matrix:
[     a|     0]
[------+------]
[     0|-a - 1]

S is the matrix:
[     1      1]
[     a -a - 1]

Test for the equality T(2) = S J S.inverse()...
Is T2 = S J S.inverse()? True
The columns of S are giving the base change...

Let e1, e2 be the base of CF, where:
e1 = q - q^3 - q^4 - 2*q^6 + 2*q^7 - q^8 + 2*q^9 + 2*q^10 - 4*q^11 + O(q^12)
e2 = q^2 - 2*q^3 - q^4 + 2*q^5 + q^6 + 2*q^7 - 2*q^8 - 2*q^10 - 2*q^11 + O(q^12)

Let f1, f2 be the corresponding eigenforms:
f1 = q + a*q^2 + (-2*a - 1)*q^3 + (-a - 1)*q^4 + 2*a*q^5 + (a - 2)*q^6 + (2*a + 2)*q^7 + (-2*a - 1)*q^8 + 2*q^9 + (-2*a + 2)*q^10 + (-2*a - 4)*q^11 + O(q^12)
f2 = q + (-a - 1)*q^2 + (2*a + 1)*q^3 + a*q^4 + (-2*a - 2)*q^5 + (-a - 3)*q^6 - 2*a*q^7 + (2*a + 1)*q^8 + 2*q^9 + (2*a + 4)*q^10 + (2*a - 2)*q^11 + O(q^12)


Then we have:
f1 is an eigenform for T(2) w.r.t. eigenvalue a
f2 is an eigenform for T(2) w.r.t. eigenvalue -a - 1

f1 is an eigenform for T(3) w.r.t. eigenvalue -2*a - 1
f2 is an eigenform for T(3) w.r.t. eigenvalue 2*a + 1

f2 is an eigenform for T(5) w.r.t. eigenvalue -2*a - 2
f1 is an eigenform for T(5) w.r.t. eigenvalue 2*a

f1 is an eigenform for T(7) w.r.t. eigenvalue 2*a + 2
f2 is an eigenform for T(7) w.r.t. eigenvalue -2*a

f2 is an eigenform for T(11) w.r.t. eigenvalue 2*a - 2
f1 is an eigenform for T(11) w.r.t. eigenvalue -2*a - 4

f1 is an eigenform for T(13) w.r.t. eigenvalue 3
f2 is an eigenform for T(13) w.r.t. eigenvalue 3

f2 is an eigenform for T(17) w.r.t. eigenvalue 2*a + 4
f1 is an eigenform for T(17) w.r.t. eigenvalue -2*a + 2

f1 is an eigenform for T(19) w.r.t. eigenvalue -2
f2 is an eigenform for T(19) w.r.t. eigenvalue -2

(The matrices for the Hecke operators differ from the posted ones, since the sage basis differ.)

I hope, this helps to proceed. (It is hard to specifically translate the core of the question "I have been trying k.< a > = NumberField( x^2 + x - 1 ), but then I don't know how to proceed with this a.")

A final note: If there is a need for a "ring" to do the computations inside, to test for equalities, to work with matrices over it, et caetera, here is the ring:

sage: f1.q_expansion().parent()
Power Series Ring in q over Number Field in a with defining polynomial x^2 + x - 1

P.S. The question got an 1up, since it gives all needed details in a given interesting number theoretical / modular structure, in a field, which is one of the strengths of sage. Such examples are needed, and the provide the best way to understand sage by math's and/or math's by sage...

edit flag offensive delete link more

Comments

Thank you for the long answer! I am afraid it does not completely solve my problem, but it is still interesting. The thing is that my matrices don't come from Sage, but from my own code that computes a basis of the homology and it's hecke operators (which is the purpose of my project), which corresponds to a basis of the cusp forms. So I am trying to make something independent of the command CuspForms. The slightly cryptical sentence I have edited now, hopefully it makes more sense.

TheBeiram gravatar imageTheBeiram ( 2018-01-15 11:21:23 +0200 )edit

And what I am also wondering, if I have any matrix, (for instance T2) could I make the Jordan Form in terms of 'a'. You did this here, but it only works because you are working with CuspForms. But could we do this more generally?

TheBeiram gravatar imageTheBeiram ( 2018-01-15 11:35:04 +0200 )edit
1

I also inserted a comment directly under the question. I think, such kind of problems (coming from the coefficient ring) are solved by using the right ring, for instance:

K.<b> = QuadraticField(5)
T2 = matrix( K,2,2, (-2,-1/2,2,1) )
T3 = matrix( K,2,2, (3,1,-4,-3) )
J2, S = T2.jordan_form( transformation=1 )

print S^-1 * T2 * S
print S^-1 * T3 * S

This gives:

[ 1/2*b - 1/2            0]
[           0 -1/2*b - 1/2]

and

[-b  0]
[ 0  b]

Good luck and good ideas in the research!

(If there is still something open, please do not hesitate to post it!)

dan_fulea gravatar imagedan_fulea ( 2018-01-15 13:07:02 +0200 )edit

Yes this is what I need. Only thing is that my matrices come out of some algorithm, so I would like to transform them into matrices over $K$, instead of construct them as above. So given some matrix, how do I change the ring. change_ring doesn't seem to do the trick. I could just put the entries into matrix() one by one again, but is there a more direct way?

TheBeiram gravatar imageTheBeiram ( 2018-01-15 13:48:45 +0200 )edit

Ok, I guess I solved it by just saying matrix(K,2,2,[T2[i] for i in srange(2)])

TheBeiram gravatar imageTheBeiram ( 2018-01-15 14:00:44 +0200 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

Stats

Asked: 2018-01-13 11:32:29 +0200

Seen: 793 times

Last updated: Nov 24 '23