Processing math: 100%
Ask Your Question
0

Series expansion for theta function of even lattice

asked 7 years ago

Marcel gravatar image

updated 7 years ago

FrédéricC gravatar image

I am new to sage and trying to figure out how to calculate the series expansion of the theta function for an even lattice L, i.e. ΘL(q)=xLqx,x/2

I tried the following code for the A2 lattice, but I doesn't really do what its supposed to do

Q=QuadraticForm(QQ,2,[2,-1,2]); Q
Q.theta_series(20)

I found the following code on https://oeis.org/A004016 (OEIS), which gives the correct result:

ModularForms( Gamma1(3), 1, prec=81).0
Preview: (hide)

2 Answers

Sort by » oldest newest most voted
1

answered 7 years ago

dan_fulea gravatar image

updated 7 years ago

Please let me answer using an epic style, since it reflects my experience with these objects.

Let A be the quadratic form from the above post...

sage: A = QuadraticForm( QQ, 2, [2, -1, 2] )
sage: A
Quadratic form in 2 variables over Rational Field with coefficients: 
[ 2 -1 ]
[ * 2 ]

A longer time i thought this is the quadratic form corresponding to the symmetrically extended matrix with those entries, i.e. to...

sage: MA = matrix( QQ, 2, 2, [ 2, -1, -1, 2] )
sage: MA
[ 2 -1]
[-1  2]

since what else should be the star?! ...till i got an error, then searching for it was typing something like...

sage: A
Quadratic form in 2 variables over Rational Field with coefficients: 
[ 2 -1 ]
[ * 2 ]
sage: A.matrix()    # oh, there is a matrix method!
[ 4 -1]
[-1  4]
sage: MA = matrix( QQ, 2, 2, [ 2, -1, -1, 2] )
sage: MA
[ 2 -1]
[-1  2]

sage: v = vector( [100, 10] )
sage: A(v)
19200
sage: 2 * 100^2 - 2*100*10 + 10^2
18100
sage: 2 * 100^2 -   100*10 + 10^2
19100
sage: ( v * A.matrix() * v.column() ) / 2
(19200)
sage: ( v * MA         * v.column() ) / 2
(9100)
sage: ( v * MA         * v.column() )
(18200)

And the quadratic form A is not quite reflected by the symmetic matrix MA. What is going on here? I think, the answer to the question is already here, despite of the fact that there is only one more question...

In the given posted situation with the Q, i suspect the quadratic form written for the above matrix MA instead is needed / intended, the one which maps the vector x with components s,t to qA(x)=12x,xA=12(2s22st+t2)=x2xy+y2 .

Since the expected theta series is an other one, let us consider "the other quadratic form", and the theta series associated to it...

sage: B = QuadraticForm( QQ, 2, [1, -1, 1] )
sage: B
Quadratic form in 2 variables over Rational Field with coefficients: 
[ 1 -1 ]
[ * 1 ]
sage: B.theta_series( 20 )
1 + 6*q + 6*q^3 + 6*q^4 + 12*q^7 + 6*q^9 + 6*q^12 + 12*q^13 + 6*q^16 + 12*q^19 + O(q^20)

...is in agreement with

sage: ModularForms( Gamma1(3), 1, prec=20 ).0
1 + 6*q + 6*q^3 + 6*q^4 + 12*q^7 + 6*q^9 + 6*q^12 + 12*q^13 + 6*q^16 + 12*q^19 + O(q^20)

and in fact the first 1000 coefficients do coincide... For this we may try successively to get them (right):

sage: b = B.theta_series( 1000 )
sage: m = ModularForms( Gamma1(3), 1, prec=20 ).0

sage: b.coefficients()[:20]    # !only non zero coefficients shown
[1, 6, 6, 6, 12, 6, 6, 12, 6, 12, 12, 6, 6, 12, 12, 6, 12, 12, 12, 6]
sage: m.coefficients( 1000 )[:20]   # !first coeff is not shown
[6, 0, 6, 6, 0, 0, 12, 0, 6, 0, 0, 6, 12, 0, 0, 6, 0, 0, 12, 0]

sage: b.coefficients()[:20]    # !only non zero coefficients shown
[1, 6, 6, 6, 12, 6, 6, 12, 6, 12, 12, 6, 6, 12, 12, 6, 12, 12, 12, 6]
sage: b.polynomial().coeffs()[:20]
[1, 6, 0, 6, 6, 0, 0, 12, 0, 6, 0, 0, 6, 12, 0, 0, 6, 0, 0, 12]
sage: m.coefficients(1000)[:20]    # !first coefficient, the starting one, not shown
[6, 0, 6, 6, 0, 0, 12, 0, 6, 0, 0, 6, 12, 0, 0, 6, 0, 0, 12, 0]

sage: b.polynomial().coeffs()[1:20] == m.coefficients(1000)[:19]
True
sage: b.polynomial().coeffs()[1:1000] == m.coefficients(1000)[:999]
True

I hope we are both at home now, know which maths object is which sage object.

Preview: (hide)
link

Comments

Very interesting. Do you think that the documentation for QuadraticForm needs updating to make all this clearer?

kcrisman gravatar imagekcrisman ( 7 years ago )

The present documentation is strong enough. But because many people in all ages, countries, and target fields are using the software, some of them will always be confused at some point.

In this case, one could for instance...

  • set a 0 instead of each subdiagonal star in the print (in the __str__ or __repr__ method) of the quadratic form
  • or even better mention its discriminant in it,
  • give some examples at the top of the doc that eliminates this misleading point... (In my course, immediately after introducing a quadratic form, the matrix for it was defined and assumed to be symmetric. There was no discussion about how to initialize it best in a software. And so it is on my own HD.)
  • and also give some examples (with a special count in low degrees) for the theta_series method.
dan_fulea gravatar imagedan_fulea ( 7 years ago )

Thanks a lot. I figured this in the meanwhile and wrote my own answer which i guess needed moderating. I definitely think the documentation should be updated. Or an example like A2 should be given.

Marcel gravatar imageMarcel ( 7 years ago )

@dan_fulea, can you open a ticket since you understand this better?

kcrisman gravatar imagekcrisman ( 7 years ago )

I am rather new in the sage community, how can i do this? (Open a ticket, implement - in this case rather only add documentation in the doc string of some modules, some examples for instance, then commit changes, etc.) Is there a page or a mailing list i could subscribe to?! Thanks!

dan_fulea gravatar imagedan_fulea ( 7 years ago )
0

answered 5 years ago

There is a simpler explanation, which is that the quadratic form

[ 2 -1 ]
[ *  2 ]

Maps to the matrix

[ 2 -1 ]
[ 0  2 ]

Which is equivalent to the symmetric matrix

[2    -1/2]
[-1/2    2]

Which can be gotten with A.Gram_matrix().

The A.matrix() function listed in the answer above is the Hessian, which is double the Gram matrix.

The documentation for Gram matrix gives as an example a Quadratic form with diagonal matrix. Should probably be updated to include off-diagonal terms to make this clearer.

Preview: (hide)
link

Your Answer

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

Add Answer

Question Tools

1 follower

Stats

Asked: 7 years ago

Seen: 854 times

Last updated: Jun 22 '17