Function: lfunzeros
Section: l_functions
C-Name: lfunzeros
Prototype: GGD8,L,b
Help: lfunzeros(L,lim,{divz=8}): lim being
either an upper limit or a real interval, computes an ordered list of
zeros of L(s) on the critical line up to the given upper limit or in the
given interval. Use a naive algorithm which may miss some zeros.
To use a finer search mesh, set divz to some integral value
larger than the default (= 8).
Doc: \kbd{lim} being either a positive upper limit or a non-empty real
interval inside $[0,+\infty[$, computes an
ordered list of zeros of $L(s)$ on the critical line up to the given
upper limit or in the given interval. Use a naive algorithm which may miss
some zeros: it assumes that two consecutive zeros at height $T \geq 1$
differ at least by $2\pi/\omega$, where
$$\omega := \kbd{divz} \cdot \big(d\log(T/2\pi) +d+ 2\log(N/(\pi/2)^d)\big).$$
To use a finer search mesh, set divz to some integral value
larger than the default (= 8).
\bprog
? lfunzeros(1, 30) \\ zeros of Rieman zeta up to height 30
%1 = [14.134[...], 21.022[...], 25.010[...]]
? #lfunzeros(1, [100,110]) \\ count zeros with 100 <= Im(s) <= 110
%2 = 4
@eprog\noindent The algorithm also assumes that all zeros are simple except
possibly on the real axis at $s = k/2$ and that there are no poles in the
search interval. (The possible zero at $s = k/2$ is repeated according to
its multiplicity.)
Should you pass an \kbd{Linit} argument to the function, beware that the
algorithm needs at least
\bprog
L = lfuninit(Ldata, [T+1])
@eprog\noindent where $T$ is the upper bound of the interval defined by
\kbd{lim}: this allows to detect zeros near $T$. Make sure that your
\kbd{Linit} domain contains this one, i.e. a domain $[1,T+1]$ is fine but
$[0, T]$ is not! The algorithm assumes that a multiple zero at $s = k / 2$
has order less than or equal to the maximal derivation order allowed by the
\kbd{Linit}. You may increase that value in the \kbd{Linit} but this is
costly: only do it for zeros of low height or in \kbd{lfunorderzero} instead.