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:

- implement it from scratch in Sage
- implement it from scratch in Mathematica (or some other CAS)
- implement it from scratch in C++
- figure out how to modify Mike Rubinstein's lcalc program to do what you want.

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.