Function: zetamult
Section: transcendental
C-Name: zetamult0
Prototype: GDGp
Help: zetamult(s, {T}): multiple zeta value at integral s = [s1,...,sk];
if given, T is the output of zetamultinit.
Doc: For $s$ a vector of positive integers such that $s[1] \geq 2$,
returns the multiple zeta value (MZV)
$$\zeta(s_1,\dots, s_k) = \sum_{n_1>\dots>n_k>0} n_1^{-s_1}\dots n_k^{-s_k}.$$
\bprog
? zetamult([2,1]) - zeta(3) \\ Euler's identity
%1 = 0.E-38
@eprog\noindent
If the bit precision is $B$, this function runs in time $\tilde{O}(k B^2)$.
If $T$ is provided, it must be the output of \kbd{zetamultinit}$(w)$ for
some $w \geq s_1 + \dots + s_k$ and will provide a small speed up,
usually about 10\%.
\bprog
? T = zetamultinit(20); s = [2,1,1,1,1,1,1,1,1];
? for(i=1,10^3, zetamult(s))
time = 373 ms.
? for(i=1,10^3, zetamult(s, T)) \\ faster
time = 279 ms.
? zetamult(vector(10,i,2), T)
%4 = 1.7165384749821433018378232207719985786 E-10
? zetamult(vector(11,i,2), T) \\ overshoot
*** at top-level: zetamult(vector(11,i
*** ^--------------------
*** zetamult: domain error in zetamult: weight > 20
@eprog
In addition to the above format (\kbd{avec}), the function
also accepts an internal binary format \kbd{evec} (each $s_i$ is replaced
by $s_i$ bits, all of them 0 but the last one), and an \kbd{index} format
(if $e$ is the positive integer attached the \kbd{evec} vector of
bits, the index is the integer $e + 2^{k-2}$). The function
\kbd{zetamultconvert} allows to pass from one format to the other; the
function \kbd{zetamultall} computes simultaneously all MZVs of weight
$\sum_{i\leq k} s_i$ up to $n$.
Variant: Also available is \fun{GEN}{zetamult}{GEN avec, long prec}.