flintlib / arb

Arb has been merged into FLINT -- use https://github.com/flintlib/flint/ instead
http://arblib.org/
GNU Lesser General Public License v2.1
457 stars 138 forks source link

Using numerical integration for root-counting of Zeta(s) at very high T. #240

Open rudolph-git-acc opened 6 years ago

rudolph-git-acc commented 6 years ago

In your recent paper on numerical integration in arbitrary-precision ball arithmetic (https://arxiv.org/pdf/1802.07942.pdf), you present a highly effective procedure to count the non-trivial zeros of the Riemann Zeta function. I have tried the associated code from the ARB-examples and am really impressed by the speed of the calculations up to T=10^9 (which is already pretty close to the RH-verication up to T=3x10^10 done by Platts et al)!

In your paper you make the comment:

(...)We obtain balls that provably determine N(T), and the method scales rea- sonably well. Unfortunately, the evaluation of ζ(s) in Arb is currently not well tuned for all s, which makes large T slower than necessary and can make this computation extremely slow with slightly different settings (...).

I have tried computing values > 10^9 and indeed as you predicted things suddenly start to get very slow. Selecting a higher eps does dramatically speed up the integration along the vertical line, however we then pay the prize in increased complexity in evaluating the horizontal line.

Is further tuning of ζ(s) in Arb for higher T in your plans? If so, could you share your thoughts on how such tuning might work?

fredrik-johansson commented 6 years ago

(Note that this procedure counts zeros in the critical strip without actually verifying RH. Turing's method is the way to go for actually counting or computing zeros efficiently.)

I think there is more than one place in the code that needs to be fixed, but one issue is that the cutoff between Riemann-Siegel and Euler-Maclaurin only looks at the midpoints, ignoring whether the complex interval is very wide.

rudolph-git-acc commented 6 years ago

Thanks for the swift response and of course counting zeros in the strip is not sufficient for verifying the RH.

There does exist a closed form for counting zeros on the critical line that evaluates pretty fast at high T (did it up to T=10^20). It appears to be the contour integration for counting zeros in the critical strip that becomes the bottleneck at higher T. Wouldn't comparing both counts also verify the RH up to a certain T (assuming there is no zero at T itself)?

fredrik-johansson commented 6 years ago

What do you mean by closed form?

rudolph-git-acc commented 6 years ago

I meant this function for counting zeros on the critical line:

image

Agree it is not really a closed form, however wanted to make the point that it does evaluate reasonably fast even at very high T in ARB. Since it also involves the zeta-function, I wondered whether the contour calculations around the strip (from your paper) could also be stretched further beyond 10^9. For our project we have now produced numerical results that are conditional on the RH being verified up till certain T's in the T > 10^10 domain. However, having now read more about root counting and finding, I agree that the way to go is Turing's method, since that doesn't require such contour integration at all.

EDIT: I had mistakenly assumed that the formula above counted zeros on the critical line, however it counts zeros in the entire strip. Counting zeros on the critical line at higher T is very hard work...