5
$\begingroup$

This seems to be a quite a simple problem but I cannot make it work.
I am trying to find all values within a given range for which the real part of the Zeta function vanishes on the line: $\;z=\frac{1}{2} + i\;y$.

Given the following plot:

Plot[Re[ Zeta[ 1/2 + I t]], {t, 14, 14.6}]

real part of Riemann zeta over the critical line

I would like to get the values: $14.13...\;, 14.5....$.

$\endgroup$
10
  • $\begingroup$ Closely related Why do these two different zetas produce the same value?. You can use Solve[Zeta[x] == -(1/12) && Abs[x] < 20, x]. $\endgroup$
    – Artes
    Oct 23, 2013 at 9:12
  • 1
    $\begingroup$ FindRoot[Re[Zeta[1/2 + I t]], {t, #}] & /@ {14, 14.5} yields {{t -> 14.1347}, {t -> 14.5179}}. By the way your question is still far from being clear. $\endgroup$
    – Artes
    Oct 23, 2013 at 9:27
  • $\begingroup$ @ Artes - thank you - this is what I was after! $\endgroup$
    – martin
    Oct 23, 2013 at 9:31
  • 1
    $\begingroup$ FindRoot[Re[Zeta[1/2 + I t]], {t, #}] & /@ Range[14, 25] $\endgroup$
    – Artes
    Oct 23, 2013 at 9:37
  • 1
    $\begingroup$ We find numericall solutions with FindRoot nonetheless you can get rid of them using appropriate functionality. This gives you a simple approach Im[ZetaZero[#] & /@ Range[3] // N]. $\endgroup$
    – Artes
    Oct 23, 2013 at 9:56

2 Answers 2

11
$\begingroup$

When symbolically solving transcendental equations, one should appropriately use Solve or Reduce with adequate logical combinations of equations, inequalities, domain specifications, etc. to get desired results. There are limitations for certain types of equations involving transcendental functions, see e.g. Transcendental Roots. Here is an example which doesn't work in Mathematica 9:

Reduce[ Re[Zeta[x]] == 0 && 14 < Im[x] < 15 && Re[x] == 1/2, x]

Namely, it cannot find roots of the real part of Zeta; nonetheless, we can find symbolic zeros of the Riemann Zeta function:

Solve[Zeta[x] == 0 && 0 < Im[x] < 25 && Re[x] == 1/2, x]
{{x -> ZetaZero[1]}, {x -> ZetaZero[2]}}

Let's use Reduce in another way:

Reduce[ Zeta[ 1/2 + I t] == 0 && 0 <= t <= 250, t]
C[1] ∈ Integers && 1 <= C[1] <= 108 && t == -(1/2) I (-1 + 2 ZetaZero[C[1]])

Here, we provide plot of the real and imaginary part of Zeta on the critical line, in the range 0 < t < 50:

Plot[ Table[ h[ Zeta[ 1/2 + I t]], {h, {Re, Im}}], {t, 0, 50}, 
      Evaluated -> True, AspectRatio -> 1/4, PlotStyle -> Thick, 
      Epilog -> {Red, PointSize[0.007], Point[{Im@ZetaZero[#], 0} & /@ Range[10]]}, 
      ImageSize -> 800, PlotLegends -> Placed["Expressions", {Left, Top}]]

plot

The function ZetaZero is very useful, since one can evaluate its numerical values up to 10^7-th zero (on the other hand, we know there are infinitely many Zeta zeros on the critical line), then one should work with e.g. FindRoot yielding numerical results.

ZetaZero /@ {1, 2, 10^7} // Im // N
{14.1347, 21.022, 4.99238*10^6}

If we are satisfied with numerical values only, we can use FindRoot to get zeros of the real part of Zeta between 14 and 15:

FindRoot[ Re[ Zeta[ 1/2 + I t]], {t, #, 14, 15}]& /@ {14, 14.5}
{{t -> 14.1347}, {t -> 14.5179}}
Zeta[1/2 + I t] /. % // Chop
{0, 0. + 0.31227 I}

Working with FindRoot, it should be useful to localize approximately starting values with ContourPlot like e.g. here.

$\endgroup$
4
$\begingroup$

We can use FindAllCrossings[] to find the roots of $\Re\left(\zeta\left(\frac12+i t\right)\right)$ like so:

FindAllCrossings[Re[Zeta[1/2 + I t]], {t, 10, 30}, WorkingPrecision -> 20]
   {14.134725141734693790, 14.517919628262233651, 20.654044969367919453,
    21.022039638771554993, 25.010857580145688763, 25.491508214625488621,
    29.738510300151580038}

This is of course a superset of the zeroes of $\zeta(s)$, as we can see:

N[Im[ZetaZero[Range[7]]], 20]
   {14.134725141734693790, 21.022039638771554993, 25.010857580145688763,
    30.424876125859513210, 32.935061587739189691, 37.586178158825671257,
    40.918719012147495187}

where for instance we see that $s_2\approx\frac12+14.5179196i$ is a zero of $\Re(\zeta(s))$, but not a zero of $\zeta(s)$.


Digression

Back in the day, before ZetaZero[] became built-in, I also used FindAllCrossings[] to find the zeroes of $\zeta(s)$ on the critical line. The function I used for this is the associated Riemann-Siegel function $Z(t)$. Here is how I used it:

FindAllCrossings[RiemannSiegelZ[t], {t, 10, 42}, WorkingPrecision -> 20]

where the results are virtually the same as that of N[Im[ZetaZero[Range[7]]], 20].

The approach is still useful for the more complicated example of the Ramanujan-Dirichlet series $\mathcal{f}(s)$, which is built-in as RamanujanTauL[]. In this scenario, the critical line is at $\Re(s)=6$ instead of $\Re(s)=\frac12$ for $\zeta(s)$. $\mathcal{f}(s)$ also has an associated $Z$ function, built-in as RamanujanTauZ[], that is useful in finding the zeroes of $\mathcal{f}(s)$ on its critical line (see also Keiper's paper for more details):

(* this takes a long time; this function is harder than RiemannSiegelZ[]! *)
FindAllCrossings[RamanujanTauZ[t], {t, 8, 20}, WorkingPrecision -> 20] // Quiet
   {9.2223793999211025235, 13.907549861392134406, 17.442776978234473314,
    19.656513141954961000}

Verify:

RamanujanTauL[6 + I %] // Chop
   {0, 0, 0, 0}
$\endgroup$
1
  • $\begingroup$ Great - that's a new one on me :) $\endgroup$
    – martin
    Jun 28, 2015 at 11:20

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.