Note

Arb was merged into FLINT in 2023.

The documentation on arblib.org will no longer be updated.

See the FLINT documentation instead.


Algorithms for polylogarithms

The polylogarithm is defined for \(s, z \in \mathbb{C}\) with \(|z| < 1\) by

\[\operatorname{Li}_s(z) = \sum_{k=1}^{\infty} \frac{z^k}{k^s}\]

and for \(|z| \ge 1\) by analytic continuation, except for the singular point \(z = 1\).

Computation for small z

The power sum converges rapidly when \(|z| \ll 1\). To compute the series expansion with respect to \(s\), we substitute \(s \to s + x \in \mathbb{C}[[x]]\) and obtain

\[\operatorname{Li}_{s+x}(z) = \sum_{d=0}^{\infty} x^d \frac{(-1)^d}{d!} \sum_{k=1}^{\infty} T(k)\]

where

\[T(k) = \frac{z^k \log^d(k)}{k^s}.\]

The remainder term \(\left| \sum_{k=N}^{\infty} T(k) \right|\) is bounded via the following strategy, implemented in mag_polylog_tail().

Denote the terms by \(T(k)\). We pick a nonincreasing function \(U(k)\) such that

\[\frac{T(k+1)}{T(k)} = z \left(\frac{k}{k+1}\right)^s \left( \frac{\log(k+1)}{\log(k)} \right)^d \le U(k).\]

Then, as soon as \(U(N) < 1\),

\[\sum_{k=N}^{\infty} T(k) \le T(N) \sum_{k=0}^{\infty} U(N)^k = \frac{T(N)}{1 - U(N)}.\]

In particular, we take

\[U(k) = z \; B(k, \max(0, -s)) \; B(k \log(k), d)\]

where \(B(m,n) = (1 + 1/m)^n\). This follows from the bounds

\[\begin{split}\left(\frac{k}{k+1}\right)^{s} \le \begin{cases} 1 & \text{if } s \ge 0 \\ (1 + 1/k)^{-s} & \text{if } s < 0. \end{cases}\end{split}\]

and

\[\left( \frac{\log(k+1)}{\log(k)} \right)^d \le \left(1 + \frac{1}{k \log(k)}\right)^d.\]

Expansion for general z

For general complex \(s, z\), we write the polylogarithm as a sum of two Hurwitz zeta functions

\[\operatorname{Li}_s(z) = \frac{\Gamma(v)}{(2\pi)^v} \left[ i^v \zeta \left(v, \frac{1}{2} + \frac{\log(-z)}{2\pi i}\right) + i^{-v} \zeta \left(v, \frac{1}{2} - \frac{\log(-z)}{2\pi i}\right) \right]\]

in which \(s = 1-v\). With the principal branch of \(\log(-z)\), we obtain the conventional analytic continuation of the polylogarithm with a branch cut on \(z \in (1,+\infty)\).

To compute the series expansion with respect to \(v\), we substitute \(v \to v + x \in \mathbb{C}[[x]]\) in this formula (at the end of the computation, we map \(x \to -x\) to obtain the power series for \(\operatorname{Li}_{s+x}(z)\)). The right hand side becomes

\[\Gamma(v+x) [E_1 Z_1 + E_2 Z_2]\]

where \(E_1 = (i/(2 \pi))^{v+x}\), \(Z_1 = \zeta(v+x,\ldots)\), \(E_2 = (1/(2 \pi i))^{v+x}\), \(Z_2 = \zeta(v+x,\ldots)\).

When \(v = 1\), the \(Z_1\) and \(Z_2\) terms become Laurent series with a leading \(1/x\) term. In this case, we compute the deflated series \(\tilde Z_1, \tilde Z_2 = \zeta(x,\ldots) - 1/x\). Then

\[E_1 Z_1 + E_2 Z_2 = (E_1 + E_2)/x + E_1 \tilde Z_1 + E_2 \tilde Z_2.\]

Note that \((E_1 + E_2) / x\) is a power series, since the constant term in \(E_1 + E_2\) is zero when \(v = 1\). So we simply compute one extra derivative of both \(E_1\) and \(E_2\), and shift them one step. When \(v = 0, -1, -2, \ldots\), the \(\Gamma(v+x)\) prefactor has a pole. In this case, we proceed analogously and formally multiply \(x \, \Gamma(v+x)\) with \([E_1 Z_1 + E_2 Z_2] / x\).

Note that the formal cancellation only works when the order \(s\) (or \(v\)) is an exact integer: it is not currently possible to use this method when \(s\) is a small ball containing any of \(0, 1, 2, \ldots\) (then the result becomes indeterminate).

The Hurwitz zeta method becomes inefficient when \(|z| \to 0\) (it gives an indeterminate result when \(z = 0\)). This is not a problem since we just use the defining series for the polylogarithm in that region. It also becomes inefficient when \(|z| \to \infty\), for which an asymptotic expansion would better.