mirror of
https://github.com/vale981/arb
synced 2025-03-10 20:46:39 -04:00
100 lines
2.7 KiB
ReStructuredText
100 lines
2.7 KiB
ReStructuredText
![]() |
.. _acb-modular:
|
||
|
|
||
|
**acb_modular.h** -- evaluation of modular forms in the complex numbers
|
||
|
===============================================================================
|
||
|
|
||
|
The modular group
|
||
|
-------------------------------------------------------------------------------
|
||
|
|
||
|
.. type:: psl2z_struct
|
||
|
|
||
|
.. type:: psl2z_t
|
||
|
|
||
|
Represents an element of the modular group `\text{PSL}(2, \mathbb{Z})`,
|
||
|
namely an integer matrix
|
||
|
|
||
|
.. math ::
|
||
|
|
||
|
\begin{pmatrix} a & b \\ c & d \end{pmatrix}
|
||
|
|
||
|
with `ad-bc = 1`, and with signs canonicalized such that `c \ge 0`,
|
||
|
and `d > 0` if `c = 0`.
|
||
|
The struct members *a*, *b*, *c*, *d* are of type *fmpz*.
|
||
|
|
||
|
.. function:: void psl2z_init(psl2z_t g)
|
||
|
|
||
|
Initializes *g* and set it to the identity element.
|
||
|
|
||
|
.. function:: void psl2z_clear(psl2z_t g)
|
||
|
|
||
|
Clears *g*.
|
||
|
|
||
|
.. function:: void psl2z_swap(psl2z_t f, psl2z_t g)
|
||
|
|
||
|
Swaps *f* and *g* efficiently.
|
||
|
|
||
|
.. function:: void psl2z_set(psl2z_t f, const psl2z_t g)
|
||
|
|
||
|
Sets *f* to a copy of *g*.
|
||
|
|
||
|
.. function:: void psl2z_one(psl2z_t g)
|
||
|
|
||
|
Sets *g* to the identity element.
|
||
|
|
||
|
.. function:: void psl2z_print(const psl2z_t g)
|
||
|
|
||
|
Prints *g* to standard output.
|
||
|
|
||
|
.. function:: int psl2z_equal(const psl2z_t f, const psl2z_t g)
|
||
|
|
||
|
Returns nonzero iff *f* and *g* are equal.
|
||
|
|
||
|
.. function:: void psl2z_mul(psl2z_t h, const psl2z_t f, const psl2z_t g)
|
||
|
|
||
|
Sets *h* to the product of *f* and *g*, namely the matrix product
|
||
|
with the signs canonicalized.
|
||
|
|
||
|
.. function:: void psl2z_inv(psl2z_t h, const psl2z_t g)
|
||
|
|
||
|
Sets *h* to the inverse of *g*.
|
||
|
|
||
|
.. function:: int psl2z_is_correct(const psl2z_t g)
|
||
|
|
||
|
Returns nonzero iff *g* contains correct data, i.e.
|
||
|
satisfying `ad-bc = 1`, `c \ge 0`, and `d > 0` if `c = 0`.
|
||
|
|
||
|
.. function:: void psl2z_randtest(psl2z_t g, flint_rand_t state, long bits)
|
||
|
|
||
|
Sets *g* to a random element of `\text{PSL}(2, \mathbb{Z})`
|
||
|
with entries of bit length at most *bits*
|
||
|
(or 1, if *bits* is not positive). We first generate *a* and *d*, compute
|
||
|
their Bezout coefficients, divide by the GCD, and then correct the signs.
|
||
|
|
||
|
Modular transformations
|
||
|
-------------------------------------------------------------------------------
|
||
|
|
||
|
.. function:: void acb_modular_transform(acb_t w, const psl2z_t g, const acb_t z, long prec)
|
||
|
|
||
|
Applies the modular transformation *g* to the complex number *z*,
|
||
|
evaluating
|
||
|
|
||
|
.. math ::
|
||
|
|
||
|
w = g z = \frac{az+b}{cz+d}.
|
||
|
|
||
|
The Dedekind eta function
|
||
|
-------------------------------------------------------------------------------
|
||
|
|
||
|
To be done
|
||
|
|
||
|
Jacobi theta functions
|
||
|
-------------------------------------------------------------------------------
|
||
|
|
||
|
To be done
|
||
|
|
||
|
Eisenstein series
|
||
|
-------------------------------------------------------------------------------
|
||
|
|
||
|
To be done
|
||
|
|