## Homework from Lecture 2

David Farmer

The only known way to evaluate general L-functions to high precision is with the approximate functional equation. If all you will need to do is occasionally evaluate an L-function, then you can use existing programs to do the work, treating them as a black box. There are two versions that are built into Sage: one by Tim Dokchitser and the other by Mike Rubinstein.

Dokchitser's program understands many L-functions at a high level: you can describe the L-function in terms of the object it comes from, and the program will figure out everything for you.

Rubinstein's program requires that you describe the L-function in detail, but it can handle anything -- including things that are not actually L-functions. Once you describe the L-function and indicate where you want to evaluate it, then Rubinstein's program (lcalc) figures out the "optimal" test function and then uses it in the approximate functional equation.

Problem I)
a) Prove that in the functional equation $$\Lambda(s) = \varepsilon \overline{\Lambda(1-\overline{s})},$$ the condition $|\varepsilon|=1$ is extraneous.

b) Use Stirling's formula to determine the asymptotic behavior of $\Gamma(\sigma+ i t)$ for fixed $\sigma$ as $t\to\infty$.

c) Convince yourself that $\gg t^{d/2}$ terms contribute to the approximate functional equation when evaluating a degree $d$ L-function at $L(\frac12 + i t)$.
Note that (in Rubinstein's notation) $d=2\sum \kappa_j$. A good first step is to use Stirling's formula.

Problem II) Spend some time browsing the L-functions and Modular Forms Database (LMFDB):
www.lmfdb.org.
Look at the L-functions, but also browse the other objects and follow the links to the associated L-functions. Pay attention to the coefficients, the parameters in the functional equation, and the plot of the Z-function.

Problem III) Experiment with Rubinstein's lcalc program, either by downloading and installing it on your computer, or using it in Sage. (Note: you will be using lcalc files as input. I assume this is possible through Sage, but I do not actually know for sure.) Download lcalc files from LMFDB and use them as input to the program. Modify the lcalc files and see if you get sensible results.

Problem IV) To do serious work on computing general L-functions, you need an implementation of the approximate functional equation which lets you freely adjust all the parameters. There are at least three reasonable options:

1. implement it from scratch in Sage
2. implement it from scratch in Mathematica (or some other CAS)
3. implement it from scratch in C++
4. figure out how to modify Mike Rubinstein's lcalc program to do what you want.
It turns out that the fourth option is probably not a good idea at the moment, because Rubinstein is in the middle of a major rewrite of his code. One of the goals of the rewrite is to make it easier for people to contribute to the project. So anything you do the code would have to be re-done soon. However, if you are an experienced C++ programmer, then the third option will be easier if you look at Rubinsteins code and re-use parts of it.

Note: use Riemann sums to evaluate $f_1$ and $f_2$. Built-in integration methods will take forever and give poor precision.

Problem V) Before Wednesday morning, read up to the middle of page 598 of Francesco Mezzadri's paper "How to Generate Random Matrices from the Classical Compact Groups," available at http://www.ams.org/notices/200705/fea-mezzadri-web.pdf

Note that he provides Python code, which should be easy to implement in Sage.