Functions to compute the four Jacobi theta functions theta_1, theta_2, theta_3, theta_4, which are inter-related periodic functions parameterised by either q (nome) or tau.
Jacobi Theta Function \(\theta_1\)
jacobi_theta1(x, q): First Jacobi theta function, nome parameterisation:
$$\theta_1(x, q) = 2\sum_{n=0}^\infty(-1)^n q^{(n + \frac{1}{2})^2}\text{sin}((2n+1)x)$$
jacobi_theta1tau(x, tau): First Jacobi theta function, tau parameterisation:
$$\theta_1(x | \tau) = 2\sum_{n=0}^\infty(-1)^n \exp(i\pi\tau(n+0.5)^2) \text{sin}((2n+1)x)$$
Jacobi Theta Function \(\theta_2\)
jacobi_theta2(x, q): Second Jacobi theta function, nome parameterisation:
$$\theta_2(x, q) = 2\sum_{n=0}^\infty q^{(n + \frac{1}{2})^2} \text{cos}((2n+1)x)$$
jacobi_theta2tau(x, tau): Second Jacobi theta function, tau parameterisation:
$$\theta_2(x | \tau) = 2\sum_{n=0}^\infty \exp(i\pi\tau(n+0.5)^2) \text{cos}((2n+1)x)$$
Jacobi Theta Function \(\theta_3\)
jacobi_theta3(x, q): Third Jacobi theta function, nome parameterisation:
$$\theta_3(x, q) = 1 + 2\sum_{n=0}^\infty q^{n^2} \text{cos}((2nx)$$
jacobi_theta3tau(x, tau): Third Jacobi theta function, tau parameterisation:
$$\theta_3(x | \tau) = 1 + 2\sum_{n=0}^\infty \exp(i\pi\tau n^2) \text{cos}(2nx)$$
Jacobi Theta Function \(\theta_4\)
jacobi_theta4(x, q): Fourth Jacobi theta function, nome parameterisation:
$$\theta_4(x, q) = 1 + 2\sum_{n=0}^\infty (-1)^n q^{n^2} \text{cos}((2nx)$$
jacobi_theta4tau(x, tau): Fourth Jacobi theta function, tau parameterisation:
$$\theta_4(x | \tau) = 1 + 2\sum_{n=0}^\infty (-1)^n \exp(i\pi\tau n^2) \text{cos}(2nx)$$
Usage
jacobi_theta1(x, q)
jacobi_theta1tau(x, tau)
jacobi_theta2(x, q)
jacobi_theta2tau(x, tau)
jacobi_theta3(x, q)
jacobi_theta3tau(x, tau)
jacobi_theta3m1(x, q)
jacobi_theta3m1tau(x, tau)
jacobi_theta4(x, q)
jacobi_theta4tau(x, tau)
jacobi_theta4m1(x, q)
jacobi_theta4m1tau(x, tau)See also
Boost Documentation for more details on the mathematical background.
Examples
# Jacobi Theta Functions with q parametrization
x <- 0.5
q <- 0.3 # Note: q should be in (0, 1)
tau <- 1.5
jacobi_theta1(x, q)
#> [1] 0.577394
jacobi_theta1tau(x, tau)
#> [1] 0.2951461
jacobi_theta2(x, q)
#> [1] 1.307526
jacobi_theta2tau(x, tau)
#> [1] 0.5403556
jacobi_theta3(x, q)
#> [1] 1.317401
jacobi_theta3tau(x, tau)
#> [1] 1.009707
# Special "minus 1" variants for improved accuracy when q is small
jacobi_theta3m1(x, q)
#> [1] 0.3174008
jacobi_theta3m1tau(x, tau)
#> [1] 0.00970738
jacobi_theta4(x, q)
#> [1] 0.669116
jacobi_theta4tau(x, tau)
#> [1] 0.9902926
jacobi_theta4m1(x, q)
#> [1] -0.330884
jacobi_theta4m1tau(x, tau)
#> [1] -0.009707391