Documentation | Build Status | Code Coverage |
---|---|---|
Theta.jl is a Julia package for computing the Riemann theta function and its derivatives.
For more information, refer to our preprint.
Download Julia 1.4. Start Julia and run
import Pkg
Pkg.add("Theta")
First load the package in Julia.
using Theta
We start with a matrix M
in the Siegel upper-half space.
M = [0.794612+1.9986im 0.815524+1.95836im 0.190195+1.21249im 0.647434+1.66208im 0.820857+1.68942im;
0.0948191+1.95836im 0.808422+2.66492im 0.857778+1.14274im 0.754323+1.72747im 0.74972+1.95821im;
0.177874+1.21249im 0.420423+1.14274im 0.445617+1.44248im 0.732018+0.966489im 0.564779+1.57559im;
0.440969+1.66208im 0.562332+1.72747im 0.292166+0.966489im 0.433763+1.91571im 0.805161+1.46982im;
0.471487+1.68942im 0.0946854+1.95821im 0.837648+1.57559im 0.311332+1.46982im 0.521253+2.29221im];
We construct a RiemannMatrix
using M
.
R = RiemannMatrix(M);
We can then compute the theta function on inputs z
and M
as follows.
z = [0.30657351+0.34017115im; 0.71945631+0.87045964im; 0.19963849+0.71709398im; 0.64390182+0.97413482im; 0.02747232+0.59071266im];
theta(z, R)
We can also compute first derivatives of theta functions by specifying
the direction using the optional argument derivs
. The following
code computes the partial derivative of the theta function with
respect to the first coordinate of z
.
theta(z, R, derivs=[[1,0,0,0,0]])
We specify higher order derivatives by adding more elements into the
input to derivs
, where each element specifies the direction of the
derivative. For instance, to compute the partial derivative of the
theta function with respect to the first, second and fifth coordinates
of z
, we run
theta(z, R, derivs=[[1,0,0,0,0], [0,1,0,0,0], [0,0,0,0,1]])
We can compute theta functions with characteristics using the optional
argument char
.
theta(z, R, char=[[0,1,0,1,1],[0,1,1,0,0]])
We can also compute derivatives of theta functions with characteristics.
theta(z, R, derivs=[[1,0,0,0,0]], char=[[0,1,0,1,1],[0,1,1,0,0]])