# Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world.

### Jacobi Theta Function θ1

##### Synopsis
```#include <boost/math/special_functions/jacobi_theta.hpp>
```
```namespace boost { namespace math {
template <class T, class U>
calculated-result-type jacobi_theta1(T x, U q);

template <class T, class U, class Policy>
calculated-result-type jacobi_theta1(T x, U q, const Policy&);

template <class T, class U>
calculated-result-type jacobi_theta1tau(T x, U tau);

template <class T, class U, class Policy>
calculated-result-type jacobi_theta1tau(T x, U tau, const Policy&);
}} // namespaces
```
##### Description

The functions calculate the value of first Jacobi Theta function, parameterized either in terms of the nome q: Or in terms of an imaginary τ: The nome q is restricted to the domain (0, 1), returning the result of domain_error otherwise. The following graph shows the theta function at various values of q: The final Policy argument is optional and can be used to control the behaviour of the function: how it handles errors, what level of precision to use etc. Refer to the policy documentation for more details.

##### Accuracy

The following ULPs plot is representative, fixing q=0.5 and varying x from 0 to 2π: The envelope represents the function's condition number. Note that relative accuracy degenerates periodically near θ1=0.

Fixing x=5 and varying q, the ULPs plot looks like: Accuracy tends to degenerate near q=1 (small τ).

##### Implementation

The q parameterization is implemented using the τ parameterization, where τ=-log(q)/π.

If τ is greater than or equal to 1, the summation above is used as-is. However if τ < 1, the following identity DLMF 20.7.30 is used, defining τ'=-1/τ: This transformation of variables ensures that the function will always converge in a small number of iterations.