gives the Riemann–Siegel function
.
RiemannSiegelZ
gives the Riemann–Siegel function
.
Details
- Mathematical function, suitable for both symbolic and numerical manipulation.
, where
is the Riemann–Siegel theta function, and
is the Riemann zeta function.
for real
.
is an analytic function of
except for branch cuts on the imaginary axis running from
to
. - For certain special arguments, RiemannSiegelZ automatically evaluates to exact values.
- RiemannSiegelZ can be evaluated to arbitrary numerical precision.
- RiemannSiegelZ automatically threads over lists.
- RiemannSiegelZ can be used with Interval and CenteredInterval objects. »
Examples
open all close allBasic Examples (5)
RiemannSiegelZ[2.]FindRoot[RiemannSiegelZ[t], {t, 1000, 1002}]Im[ZetaZero[1, 1000]]//NPlot over a subset of the reals:
Plot[RiemannSiegelZ[x], {x, 0, 100}]Plot over a subset of the complexes:
ComplexPlot3D[RiemannSiegelZ[z], {z, -1 - I, 1 + I}, PlotLegends -> Automatic]Series expansion at the origin:
Series[RiemannSiegelZ[x], {x, 0, 2}]//FullSimplifyScope (28)
Numerical Evaluation (6)
RiemannSiegelZ[.5]N[RiemannSiegelZ[1 / 3]]N[RiemannSiegelZ[-12]]RiemannSiegelZ[0.]N[RiemannSiegelZ[5 / 4], 50]N[RiemannSiegelZ[4 / 3], 20]The precision of the output tracks the precision of the input:
RiemannSiegelZ[5.21111111111111111111]N[RiemannSiegelZ[.5 + .5I]]N[RiemannSiegelZ[4 + I]]Evaluate efficiently at high precision:
RiemannSiegelZ[2`100]//TimingRiemannSiegelZ[12`1000];//TimingRiemannSiegelZ can be used with Interval and CenteredInterval objects:
RiemannSiegelZ[Interval[{1.234, 1.235}]]RiemannSiegelZ[CenteredInterval[3 / 2, 1 / 1000]]Compute the elementwise values of an array:
RiemannSiegelZ[{{-1.2, I + .1}, {.1, -1.5}}]Or compute the matrix RiemannSiegelZ function using MatrixFunction:
MatrixFunction[RiemannSiegelZ, {{-1.2, I + .1}, {.1, -1.5}}]//FullSimplifySpecific Values (2)
RiemannSiegelZ[0]Find the first positive maximum of RiemannSiegelZ[x]:
xmax = FindRoot[D[RiemannSiegelZ[x], x] == 0, {x, 20}][[1, 2]]// ChopPlot[RiemannSiegelZ[x], {x, -10, 30}, Epilog -> Style[Point[{xmax, RiemannSiegelZ[xmax]}], PointSize[Large], Red]]Visualization (3)
Plot the RiemannSiegelZ:
Plot[RiemannSiegelZ[t], {t, -30, 30}]Plot the real part of the RiemannSiegelZ function:
ComplexContourPlot[Re[RiemannSiegelZ[z]], {z, -4 - 4I, 4 + 4I}, IconizedObject[«PLotOptions»]]Plot the imaginary part of the RiemannSiegelZ function:
ComplexContourPlot[Im[RiemannSiegelZ[z]], {z, -4 - 4I, 4 + 4I}, IconizedObject[«PlotOptions»]]Plot the real part of the RiemannSiegelZ function:
Plot3D[Re[RiemannSiegelZ[x + I y]], {x, -5, 5}, {y, -5, 5}, ColorFunction -> "BlueGreenYellow"]Plot the imaginary part of the RiemannSiegelZ function:
Plot3D[Im[RiemannSiegelZ[x + I y]], {x, -5, 5}, {y, -5, 5}, ColorFunction -> "BlueGreenYellow"]Function Properties (11)
RiemannSiegelZ is defined for all real values:
FunctionDomain[RiemannSiegelZ[x], x]FunctionDomain[RiemannSiegelZ[z], z, Complexes]//SimplifyRiemannSiegelZ is defined through the identity:
RiemannSiegelZ[t] == Exp[I RiemannSiegelTheta[t]] Zeta[1 / 2 + I t]//FullSimplifyRiemannSiegelZ threads elementwise over lists:
RiemannSiegelZ[{1.2, 1.5, 1.8}]RiemannSiegelZ is an analytic function of x:
FunctionAnalytic[RiemannSiegelZ[x], x]RiemannSiegelZ is neither non-increasing nor non-decreeing:
FunctionMonotonicity[RiemannSiegelZ[x], x]RiemannSiegelZ is not injective:
FunctionInjective[RiemannSiegelZ[x], x]Plot[{RiemannSiegelZ[x], 1 / 2}, {x, 0, 50}]RiemannSiegelZ is neither non-negative nor non-positive:
FunctionSign[RiemannSiegelZ[x], x]RiemannSiegelZ does not have singularity or discontinuity:
FunctionSingularities[RiemannSiegelZ[x], x]FunctionDiscontinuities[RiemannSiegelZ[x], x]RiemannSiegelZ is neither convex nor concave:
FunctionConvexity[RiemannSiegelZ[x], x]TraditionalForm formatting:
RiemannSiegelZ[t]//TraditionalFormDifferentiation (3)
First derivative with respect to
:
D[RiemannSiegelZ[t] , t]Evaluate derivatives numerically:
Derivative[5][RiemannSiegelZ][11.5]First and second derivatives with respect to
:
Table[D[RiemannSiegelZ[t], {t, k}], {k, 1, 2}]//FullSimplifyPlot the first and second derivatives with respect to
:
Plot[%, {t, -20, 20}, PlotLegends -> {"First Derivative", "Second Derivative", "Third Derivative"}]Series Expansions (3)
Find the Taylor expansion using Series:
Series[RiemannSiegelZ[x], {x, 0, 2}]Plots of the first three approximations around
:
terms = Normal@Table[Series[RiemannSiegelZ[x], {x, 0, m}], {m, 1, 5, 2}];
Plot[{RiemannSiegelZ[x], terms}, {x, -5, 5}, PlotRange -> {-10, 10}]Taylor expansion at a generic point:
Series[RiemannSiegelZ[x], {x, x0, 2}]//Normal// FullSimplifySeries expansion at a singular point:
Series[RiemannSiegelZ[x], {x, -I / 2, 2}, Assumptions -> x > 0]//FullSimplifyApplications (6)
Plot real and imaginary parts over the complex plane:
{Plot3D[Re[RiemannSiegelZ[x + I y]], {x, -10, 10}, {y, -10, 10}],
Plot3D[Im[RiemannSiegelZ[x + I y]], {x, -10, 10}, {y, -10, 10}]}View on the branch cut along the imaginary axis:
Plot3D[Im[RiemannSiegelZ[x + I y]], {x, -1, 1}, {y, 1, 20}]Find a zero of RiemannSiegelZ using FindRoot:
FindRoot[RiemannSiegelZ[t] == 0, {t, 20}]Or using ZetaZero:
Im[ZetaZero[1, 20]]//NTable[Im[ZetaZero[n]]//N, {n, 10}]Plot curves of vanishing real and imaginary parts of RiemannSiegelZ:
ContourPlot[{Re[RiemannSiegelZ[x + I y]] == 0, Im[RiemannSiegelZ[x + I y]] == 0}, {x, 0, 30}, {y, -10, 10}]A version of the Riemann hypothesis requires the limit of
as
to vanish:
NDSolve[{Derivative[1][u][t] == Log[Abs[RiemannSiegelZ[t]]] / (t ^ 2 + 1 / 4), u[0] == 0}, u, {t, 0, 200}]Plot double logarithmically the value of the integral:
ParametricPlot[{Log[t], Log[Abs[u[t]]] /. First[%]}, {t, 1, 200}, AspectRatio -> 1 / 2]Calculate a "signal power" of the Riemann zeta function along the critical line:
NDSolve[{u'[t] == 2RiemannSiegelZ[t] ^ 2 / (t ^ 2 + 1 / 4), u[0] == 0}, u, {t, 0, 500}]Plot the difference from the asymptotic value:
Plot[2Pi (Log[2Pi] - EulerGamma) - u[t] /. %, {t, 0, 500}]Show interlacing of the roots of Sin[RiemannSiegelTheta[t]] and RiemannSiegelZ[t]:
Plot[{Sin[RiemannSiegelTheta[t]], RiemannSiegelZ[t]}, {t, 0, 80}]Properties & Relations (2)
Possible Issues (2)
A larger setting for $MaxExtraPrecision can be needed:
N[Im[RiemannSiegelZ[10 ^ 5 - 10 ^ -50 I]], 20]
Block[{$MaxExtraPrecision = 100}, N[Im[RiemannSiegelZ[10 ^ 5 - 10 ^ -50 I]], 20]]Machine-number inputs can give high‐precision results:
RiemannSiegelZ[-1000. + 1000 I]MachineNumberQ[%]Neat Examples (3)
Recurrence plot of RiemannSiegelZ:
DensityPlot[RiemannSiegelZ[t] - RiemannSiegelZ[τ], {t, -50, 50}, {τ, -50, 50}]Play RiemannSiegelZ as a sound:
Play[RiemannSiegelZ[1000 t], {t, 0, 2}]Animate RiemannSiegelZ:
Animate[Plot[RiemannSiegelZ[t], {t, u, u + 20}, PlotRange -> {-5, 5}, Axes -> {True, False}, Frame -> True], {u, 2, Infinity, 1 / 2}, AnimationRunning -> False]See Also
Tech Notes
Related Links
History
Introduced in 1991 (2.0) | Updated in 2023 (13.3)
Text
Wolfram Research (1991), RiemannSiegelZ, Wolfram Language function, https://reference.wolfram.com/language/ref/RiemannSiegelZ.html (updated 2023).
CMS
Wolfram Language. 1991. "RiemannSiegelZ." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2023. https://reference.wolfram.com/language/ref/RiemannSiegelZ.html.
APA
Wolfram Language. (1991). RiemannSiegelZ. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/RiemannSiegelZ.html
BibTeX
@misc{reference.wolfram_2026_riemannsiegelz, author="Wolfram Research", title="{RiemannSiegelZ}", year="2023", howpublished="\url{https://reference.wolfram.com/language/ref/RiemannSiegelZ.html}", note=[Accessed: 12-June-2026]}
BibLaTeX
@online{reference.wolfram_2026_riemannsiegelz, organization={Wolfram Research}, title={RiemannSiegelZ}, year={2023}, url={https://reference.wolfram.com/language/ref/RiemannSiegelZ.html}, note=[Accessed: 12-June-2026]}