Zeta
The Riemann zeta function for , continued analytically elsewhere.
Q187235Encyclopedia of MathematicsZeta-function#Riemann.27s_zeta-functionBritannicatopic/Riemann-zeta-functionFungrimRiemannZeta✓Fungrim entryWolfram LanguageZeta!Zeta(s)the Riemann zeta function .Riemann zeta functionMathWorldRiemannZetaFunctionDLMF25.2.E1SageMathzeta(s)!SymPyzeta(s)mpmathzeta(s)Juliaenumeratio_ball(zeta, s)Zeta(s, a)the two-argument generalized (Hurwitz-type) zeta ; see HurwitzZeta for the difference.Hurwitz zeta functionMathWorldHurwitzZetaFunctionDLMF25.11.E1FungrimHurwitzZetaSageMathhurwitz_zeta(s, a)!SymPyzeta(s, a)mpmathzeta(s, a)Juliaenumeratio_ball(zeta, s, a)Typed signatures
| Type | Package | Applies |
|---|---|---|
(complex | infinity, (complex | infinity)?) -> number | analyticreplaces compute-engine | always |
(complex | infinity, (complex | infinity)?) -> number | compute-engine | always |
Details
The Riemann zeta function , for , extends by analytic continuation to a meromorphic function on all of with a single simple pole at . Over the primes it factors as the Euler product (DLMF 25.2.11), which is where its role in the distribution of primes comes from. It is HurwitzZeta's slice, , and PolyLog's edge, .
- Even positive integers have closed forms in powers of : (the Basel problem), , and so on.
- Trivial zeros at the negative even integers: .
- Special values at nonpositive integers relate to the Bernoulli numbers: . See BernoulliB.
- Pole at : , reflecting the divergence of the harmonic series.
- Odd integers (Apéry's constant , and beyond) have no known closed form and stay numeric-only.
- compute-engine reduces Zeta to an exact closed form at these special integer points -- even under plain evaluation, and even threaded over a list -- but leaves other reals, like , symbolic pending N().
- The two-argument form is provided by
@enumeratio/analytic(compute-engine's built-in Zeta is single-argument). It equals HurwitzZeta for but follows Wolfram's generalized-zeta convention for : the terms off the positive axis use and the term is dropped, so stays finite at -- in particular -- where HurwitzZeta has poles. - Certified digits: at an exact real (an integer, a rational or a decimal), is proven, not just agreed on, and so is for an exact . See HurwitzZeta for the bound, and N.
Plot
Examples
25 more kept as data, checked against the oraclesBasic #
Zeta(s, -n) = ζ(s) + Σ j^(-s): the terms left of the dropped n+a=0 slot count as |n+a|^(-s).
live ↗Known value · Wolfram Zeta[s, a], checked with wolframscript: ζ(s) + Σ_{j=1}^{n} j^(-s) (the n+a=0 term dropped); DLMF 25.11.1 defines the sum only for a ≠ 0, −1, −2, …
Known value · Wolfram Zeta[s, a], checked with wolframscript: ζ(s) + Σ_{j=1}^{n} j^(-s) (the n+a=0 term dropped); DLMF 25.11.1 defines the sum only for a ≠ 0, −1, −2, …
Known value · Wolfram Zeta[s, a], checked with wolframscript: ζ(s) + Σ_{j=1}^{n} j^(-s) (the n+a=0 term dropped); DLMF 25.11.1 defines the sum only for a ≠ 0, −1, −2, …
Known value · Wolfram Zeta[s, a], checked with wolframscript: ζ(s) + Σ_{j=1}^{n} j^(-s) (the n+a=0 term dropped); DLMF 25.11.1 defines the sum only for a ≠ 0, −1, −2, …
Known value · Wolfram Zeta[s, a], checked with wolframscript: ζ(s) + Σ_{j=1}^{n} j^(-s) (the n+a=0 term dropped); DLMF 25.11.1 defines the sum only for a ≠ 0, −1, −2, …
The convention holds left of the strip too: ζ(−1, −1) = ζ(−1) + 1, not the Bernoulli-polynomial −13/12 DLMF 25.11.14 gives where the series is meant.
live ↗Known value · Wolfram Zeta[s, a], checked with wolframscript: ζ(s) + Σ_{j=1}^{n} j^(-s) (the n+a=0 term dropped); DLMF 25.11.1 defines the sum only for a ≠ 0, −1, −2, …
At n = 1 any exact gives ; a longer sum stays symbolic unless has a closed form.
live ↗Known value · Wolfram Zeta[s, a], checked with wolframscript: ζ(s) + Σ_{j=1}^{n} j^(-s) (the n+a=0 term dropped); DLMF 25.11.1 defines the sum only for a ≠ 0, −1, −2, …
Scope #
On the critical line, — complex , from @enumeratio/analytic (compute-engine's Zeta evaluates real only). Computed in arbitrary precision and rounded once, so each part is the nearest double in every JavaScript engine
live ↗, both parts correctly rounded: the bignum kernel rather than a double one, which was off in the 14th digit
live ↗Applications #
Properties #
A negative-order value via Bernoulli polynomials:
live ↗Known value · Wolfram MathematicalFunctionData, Zeta
Subtract the first three terms of the Basel series
live ↗Known value · Wolfram MathematicalFunctionData, Zeta
The same pattern with denominator 3600
live ↗Known value · Wolfram MathematicalFunctionData, Zeta
A shift of 7 changes only the rational part
live ↗Known value · Wolfram MathematicalFunctionData, Zeta
Possible issues #
Odd integers have no known closed form (Apéry's constant, ), so compute-engine leaves them symbolic under plain evaluation -- use N() for a decimal
live ↗Neat examples #
About
| Examples | 95 |
|---|---|
| Checked against | Wolfram Language 86 agree6 differ1 unevaluatedSageMath 60 agree12 differ7 unevaluated13 errorSymPy 61 agree15 differ17 unevaluated1 errormpmath 53 agree12 differ3 unevaluated17 errorJulia 52 agree11 differ3 unevaluated19 error |
| Crosswalk | Wikipedia ×2MathWorld ×2WikidataEncyclopedia of MathematicsBritannicaDLMF ×2Fungrim ×2Fungrim entry ×48Wolfram LanguageSageMath ×2SymPy ×2mpmath ×2Julia ×2 |
Implementation
primitive · numericirreducibly numeric — it evaluates rather than rewrites
typescriptpackages/ce-patches/src/compute-engine/numerics/hurwitz-zeta.tsRiemann ζ is the m = 1 case of the Hurwitz implementation.
wgslpackages/symbols/analysis/analytic/src/shader.ts:zetaWGSLProduces a colour per pixel — complex ζ, domain-coloured.
compute-engine's WGSLTarget has no lowering for Zeta; ours compiles Zeta(s) as zetaGen(s, 1) on the real-scalar path, and the complex-portrait fragment shader (complex-plot.ts) takes it as clogPolar(hurwitz(s, vec2f(1,0))).
<notatio-complex-plot>packages/components/src/notatio-complex-plot.tsProduces a rendered phase portrait.
For a plotted ζ the head's meaning bottoms out here: the element IS the answer, and there is no expression it reduces to.
wolframpackages/oracle/src/mappings.tsRiemann ζ at one argument, in every system.
sympypackages/oracle/src/mappings.tsRiemann ζ at one argument, in every system.
mpmathpackages/oracle/src/mappings.tsRiemann ζ at one argument, in every system.
sagepackages/oracle/src/mappings.tsRiemann ζ at one argument, in every system.
wolframpackages/oracle/src/mappings.tsTwo arguments is Hurwitz. Wolfram's Zeta[s, a] drops the n+a=0 term like ours does (its HurwitzZeta[s, 0] diverges); Sage spells it hurwitz_zeta; SymPy and mpmath overload zeta.
sympypackages/oracle/src/mappings.tsTwo arguments is Hurwitz. Wolfram's Zeta[s, a] drops the n+a=0 term like ours does (its HurwitzZeta[s, 0] diverges); Sage spells it hurwitz_zeta; SymPy and mpmath overload zeta.
mpmathpackages/oracle/src/mappings.tsTwo arguments is Hurwitz. Wolfram's Zeta[s, a] drops the n+a=0 term like ours does (its HurwitzZeta[s, 0] diverges); Sage spells it hurwitz_zeta; SymPy and mpmath overload zeta.
sagepackages/oracle/src/mappings.tsTwo arguments is Hurwitz. Wolfram's Zeta[s, a] drops the n+a=0 term like ours does (its HurwitzZeta[s, 0] diverges); Sage spells it hurwitz_zeta; SymPy and mpmath overload zeta.
juliapackages/oracle/src/mappings.tsjuliapackages/oracle/src/mappings.ts See also: HurwitzZeta, BernoulliB, Gamma, Digamma, RiemannSiegelZ, RiemannZetaZero