ディリクレ級数の滑らかなカットオフ
黒木玄2018-08-12～2019-04-03, 2020-04-25, 2023-06-22
Copyright 2018,2019,2020,2023 Gen Kuroki
License: MIT https://opensource.org/licenses/MIT (https://opensource.org/licenses/MIT)
Repository: https://github.com/genkuroki/Calculus (https://github.com/genkuroki/Calculus)
このファイルは次の場所できれいに閲覧できる:
http://nbviewer.jupyter.org/github/genkuroki/Calculus/blob/master/A01%20Smooth%20cutoff%20of%20Dirichlet%20series.ipynb(http://nbviewer.jupyter.org/github/genkuroki/Calculus/blob/master/A01%20Smooth%20cutoff%20of%20Dirichlet%20series.ipynb)
このノートの元ネタは次のリンク先の式(26)以降の解説である:
Terence Tao, The Euler-Maclaurin formula, Bernoulli numbers, the zeta function, and real-variable analytic continuation(https://terrytao.wordpress.com/2010/04/10/the-euler-maclaurin-formula-bernoulli-numbers-the-zeta-function-and-realvariable-analytic-continuation/), What's new, 2010-04-10
自分のパソコンにJulia言語 (https://julialang.org/)をインストールしたい場合にはWindowsへのJulia言語のインストール (http://nbviewer.jupyter.org/gist/genkuroki/81de23edcae631a995e19a2ecf946a4f)
Julia v1.1.0 の Windows 8.1 へのインストール(https://nbviewer.jupyter.org/github/genkuroki/msfd28/blob/master/install.ipynb)
を参照せよ. 前者は古く, 後者の方が新しい.

目次
 1 Mellin変換とその逆変換
 1.1 Mellin変換
1.1.1 exp(-x²)のMellin変換
1.1.2 exp(-x)のMellin変換
1.1.3 exp(-x^m)のMellin変換
1.1.4 急減少函数のMellin変換
1.2 逆Mellin変換
 2 Dirichlet級数の滑らかなカットオフ
2.1 滑らかなカットオフの定義
2.2 滑らかなカットオフの逆Mellin変換表示
2.3 Re s < 0 および s = 0 での様子
 3 滑らかなカットオフの例
3.1 ζ(s)の場合
 3.2 極を持たない交代Dirichlet級数の場合
3.2.1 η(x) = exp(-x^2) の場合
3.2.2 η(x) = exp(-x) の場合
3.3 -ζ'(s)の場合
3.4 -(d/ds)log ζ(s)の場合
4 Riemannのゼータ函数の非自明な零点の分布

In [1]:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

using Base.MathConstants
using Base64
using Printf
using Statistics
const e = ℯ
endof(a) = lastindex(a)linspace(start, stop, length) = range(start, stop, length=length)​
using Plots#pyplot(fmt=:svg)
default(bglegend=RGBA(1.0, 1.0, 1.0, 0.5))#clibrary(:colorcet)#clibrary(:misc)
default(fmt=:png)​function pngplot(P...; kwargs...)sleep(0.1)
pngfile = tempname() * ".png"
savefig(plot(P...; kwargs...), pngfile)showimg("image/png", pngfile)end
pngplot(; kwargs...) = pngplot(plot!(; kwargs...))​
showimg(mime, fn) = open(fn) do fbase64 = base64encode(f)display("text/html", """<img src="data:$mime;base64,$base64">""")
end​
using SymPy#sympy.init_printing(order="lex") # default#sympy.init_printing(order="rev-lex")​
using SpecialFunctions
using QuadGK​
using LaTeXStrings​
using Primes
ENV["LINES"] = 100​
using HTTP

In [2]:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# Override the Base.show definition of SymPy.jl:# https://github.com/JuliaPy/SymPy.jl/blob/29c5bfd1d10ac53014fa7fef468bc8deccadc2fc/src/​@eval SymPy function Base.show(io::IO, ::MIME"text/latex", x::SymbolicObject)
print(io, as_markdown("\\displaystyle " * sympy.latex(x, mode="plain", fold_short_fra
end@eval SymPy function Base.show(io::IO, ::MIME"text/latex", x::AbstractArray{Sym})
function toeqnarray(x::Vector{Sym})a = join(["\\displaystyle " * sympy.latex(x[i]) for i in 1:length(x)], "\\\\")"""\\left[ \\begin{array}{r}$a\\end{array} \\right]"""end
function toeqnarray(x::AbstractArray{Sym,2})sz = size(x)a = join([join("\\displaystyle " .* map(sympy.latex, x[i,:]), "&") for i in 1:sz"\\left[ \\begin{array}{" * repeat("r",sz[2]) * "}" * a * "\\end{array}\\right]"
end
print(io, as_markdown(toeqnarray(x)))
end

1 Mellin変換とその逆変換
以下, 収束性の詳細のこだわらずにラフに説明する.

1.1 Mellin変換函数

𝑓(𝑥) に対して,∞𝐹(𝑠) = ∫0 𝑓(𝑥)𝑥𝑠−1 𝑑𝑥
を 𝑓(𝑥) のMellin変換と呼ぶ. 𝑓(𝑥) が ℝ 上の急減少函数で Re𝑠 > 0 ならば右辺の積分は絶対収束する. 𝑓(𝑥) が ℝ 上の急減少函数で Re𝑠 > 0 のとき, 部分積分によって,∞∞∞𝐹(𝑠) = [𝑓(𝑥) 𝑥𝑠𝑠 ] − 1𝑠 ∫0 𝑓 ′ (𝑥)𝑥𝑠 𝑑𝑥 = − 1𝑠 ∫0 𝑓 ′ (𝑥)𝑥𝑠 𝑑𝑥.
0
さらに右辺の積分因子は Re𝑠 > −1 で絶対収束するので 𝐹(𝑠) は Re𝑠 > −1 に解析接続され, 𝑠 = 0 に極を持つ可能性がある.
この操作を繰り返すことによって,∞(−1)𝑛(𝑛) 𝑠+𝑛−1
𝐹(𝑠) = 𝑠(𝑠 + 1)⋯(𝑠+ 𝑛 − 1) ∫0 𝑓 (𝑥)𝑥 𝑑𝑥.
これより, 𝐹(𝑠) は複素平面全体の有理型函数に解析接続され, その極は 𝑠 = 0,−1,−2,… に含まれる.
1.1.1 exp(-x²)のMellin変換

𝑓(𝑥) = 𝑒−𝑥2 のとき, 𝑥 = 𝑦1/2 とおくと,∞∞𝐹(𝑠) = ∫0 𝑒−𝑥2𝑥𝑠−1 𝑑𝑥 = 12 ∫0 𝑒−𝑦 𝑦𝑠/2−1 𝑑𝑦 = 12 Γ ( 𝑠2 )でガンマ函数 Γ(𝑠/2) の極の全体は 𝑠/2 = 0,−1,−2,… に一致するので, 𝐹(𝑠) の極の全体は 0 以下の偶数全体に一致する. □例:

1.1.2 exp(-x)のMellin変換
例:

𝑥 > 0 のとき 𝑓(𝑥) = 𝑒−𝑥 ならば∞

𝐹(𝑠) = ∫0 𝑒−𝑥 𝑥𝑠−1 𝑑𝑥 = Γ(𝑠)で 𝐹(𝑠) の極の全体は 𝑠 = 0,−1,−2,… に一致する. □1.1.3 exp(-x^m)のMellin変換

𝑚 > 0 であるとする. 𝑥 > 0 のとき 𝑓(𝑥) = 𝑒−𝑥𝑚 のとき, 𝑥 = 𝑦1/𝑚 とおくと,∞∞𝐹(𝑠) = ∫0 𝑒−𝑥𝑚𝑥𝑠−1 𝑑𝑥 = 𝑚1 ∫0 𝑒−𝑦 𝑦𝑠/𝑚−1 𝑑𝑦 = 𝑚1 Γ ( 𝑚𝑠 )となり, 𝐹(𝑠) の極の全体は 0 以下の 𝑚 の整数倍全体に一致する. □例:

1.1.4 急減少函数のMellin変換
例:

𝑓(𝑥) は急減少函数でかつ 0 < 𝛿 < 𝛿0 であり, |𝑥| ≦ 𝛿0 ならば 𝑓(𝑥) = 1 であると仮定する. このとき, Re𝑠 > 0 ならば,∞𝐹(𝑠) = − 1𝑠 ∫𝛿 𝑓 ′ (𝑥)𝑥𝑠 𝑑𝑥.
∞∫𝛿 𝑓 (𝑥)𝑥 𝑑𝑥 は任意の複素数 𝑠 について絶対収束しているので, 𝐹(𝑠) の極になっている可能性がある点は 𝑠 = 0 の1つだけである. □でかつ右辺の積分因子

In [3]:

Out[3]:

In [4]:



′

𝑠

1
2
3
4

eta(x) = exp(-x^2)x = symbols("x", real=true)s = symbols("s", positive=true)
integrate(eta(x)*x^(s-1), (x,0,oo))

1
2
3
4
5

eta(x,m) = exp(-x^m)x = symbols("x", real=true)s = symbols("s", positive=true)m = symbols("m", positive=true)
integrate(eta(x,m)*x^(s-1), (x,0,oo))Γ ( 𝑠2 )2Γ (1 + 𝑚𝑠 )𝑠Γ (1 + 𝑚𝑠 ) = 𝑚𝑠 Γ ( 𝑚𝑠 ) に注意せよ.

Out[4]:

1.2 逆Mellin変換

𝑓(𝑥) は急減少函数でかつ 𝐹(𝑠) はそのMellin変換であるとする:∞𝑥 = 𝑒𝑦 とおくと, 𝑑𝑥/𝑥 = 𝑑𝑦 より,𝐹(𝑠) = ∫0 𝑓(𝑥)𝑥𝑠−1 𝑑𝑥.
𝐹(𝑠) = ∫ℝ 𝑓(𝑒𝑦 )𝑒𝑠𝑦 𝑑𝑦.

𝑠 = 𝑎 + 𝑖𝑡, 𝑎 > 0, 𝑡 ∈ ℝ とおくと,𝐹(𝑎 + 𝑖𝑡) = ∫ℝ 𝑓(𝑒𝑦 )𝑒(𝑎+𝑖𝑡)𝑦 𝑑𝑦 = ∫ℝ 𝑓(𝑒𝑦 )𝑒𝑎𝑦 𝑒𝑖𝑡𝑦 𝑑𝑦.
𝑦 → −∞ で 𝑓(𝑒𝑦 ) が有界で 𝑒𝑎𝑦 が急減少し,
𝑦 → ∞ で 𝑓(𝑒𝑦 ) は(その導函数も含めて)どのような 𝑒𝑘𝑦 よりも急速に 0 に収束
𝑎𝑦𝑦するので, 𝑦 ∈ ℝ の函数として 𝑓(𝑒 )𝑒 は急減少函数になることに注意せよ. ゆえに, 𝑡 ∈ ℝ の函数としてそのFourier逆変換
𝐹(𝑎 + 𝑖𝑡) も急減少函数になる(急減少函数全体の空間はFourier変換および逆変換で閉じている). さらに, そのことから部分積分によって解析接続した結果の 𝐹(𝑠) も虚軸方向について急減少函数になることがわかる.
Fourier変換とその逆変換の理論より,

すなわちしたがって,

さらに,𝑠 = 𝑎 + 𝑖𝑡 とおくと,

𝑥 = 𝑒𝑦 とおくと,

𝑓(𝑒𝑦 )𝑒𝑎𝑦 = 2𝜋1 ∫ℝ 𝐹(𝑎 + 𝑖𝑡)𝑒−𝑖𝑡𝑦 𝑑𝑡𝑓(𝑒𝑦 ) = 2𝜋1 ∫ℝ 𝐹(𝑎 + 𝑖𝑡)𝑒−(𝑎+𝑖𝑡)𝑦 𝑑𝑡.
𝑎+𝑖∞𝑓(𝑒𝑦 ) = 2𝜋𝑖1 ∫𝑎−𝑖∞ 𝐹(𝑠)𝑒−𝑠𝑦 𝑑𝑠.
𝑎+𝑖∞𝑓(𝑥) = 2𝜋𝑖1 ∫𝑎−𝑖∞ 𝐹(𝑠)𝑥−𝑠 𝑑𝑠.

𝐹(𝑠) の逆Mellin変換と呼ぶ.
𝑓(𝑥 − 0) + 𝑓(𝑥 + 0) に修正した
注意: 𝑓(𝑥) に不連続点がある場合には左辺の 𝑓(𝑥) を不連続点 𝑥 での値を片側極限の平均2𝑓∗ (𝑥) に置き換えなければいけない. 𝑓∗ (𝑥) の正確な定義は以下の通り. 詳しくはFourier変換論におけるDiniの条件について確認せよ. □
補足: 以上の状況のもとで, 𝐹(𝑠) の 𝑠 = 0 での留数を 𝑟 と書き, −1 以下の 𝐹(𝑠) の極で最大のものを 𝐵 とし, 𝐵 < 𝑏 < 0 と仮定する. このとき, 留数定理より, 𝑥 > 0 ならば
𝑏+𝑖∞𝑓(𝑥) = 𝑟 + 2𝜋𝑖1 ∫𝑏−𝑖∞ 𝐹(𝑠)𝑥−𝑠 𝑑𝑠 = 𝑟 + 𝑂(𝑥−𝑏 ) (𝑥 → ∞).
逆Mellin変換表示された函数についてこの議論はよく使われる. □右辺を2 Dirichlet級数の滑らかなカットオフ
2.1 滑らかなカットオフの定義

𝜂(𝑥) は急減少函数で 𝜂(0) = 1 を満たすものであると仮定し, Dirichlet級数∞
𝑍(𝑠) = ∑ 𝑎𝑛 𝑛−𝑠
𝑛=1
は Re𝑠 ≧ 𝑎 で絶対収束しており, 複素平面全体に有理型函数として解析接続されると仮定する.
𝑁 > 0 に対して,∞𝑍𝜂 (𝑁,𝑠) = ∑ 𝑎𝑛 𝑛−𝑠 𝜂 ( 𝑁𝑛 )𝑛=1

とおく これを Dirichlet級数

𝑍(𝑠) のカットオフ函数 𝜂(𝑥) による滑らかなカットオフと呼ぶ Re𝑠 ≧ 𝑎 ならば 𝑁 → ∞ のとき

2.2 滑らかなカットオフの逆Mellin変換表示

𝜂(𝑥) のMellin変換を 𝐻(𝑠) と書く:∞
𝐻(𝑠) = ∫0 𝜂(𝑥)𝑥𝑠−1 𝑑𝑥.
𝐻(𝑠) は虚軸方向に急減少する函数になり, 𝑎 > 0, 𝑥 > 0 ならば
𝑎+𝑖∞
𝜂(𝑥) = 2𝜋𝑖1 ∫𝑎−𝑖∞ 𝐻(𝑡)𝑥−𝑡 𝑑𝑡.
十分大きな 𝑎 > 0 について,∞∞
𝑎+𝑖∞𝑍𝜂 (𝑁,𝑠) = ∑ 𝑎𝑛 𝑛−𝑠 𝜂 ( 𝑁𝑛 ) = ∑ 𝑎𝑛 𝑛−𝑠 2𝜋𝑖1 ∫𝑎−𝑖∞ 𝐻(𝑡)( 𝑁𝑛 )−𝑡 𝑑𝑡
𝑛=1
𝑛=1
𝑎+𝑖∞
1
= 2𝜋𝑖 ∫𝑎−𝑖∞ 𝐻(𝑡)𝑁 𝑡 𝑍(𝑠 + 𝑡)𝑑𝑡.
注意: 𝜂(0) = 1 より, Re𝑠 > −1 のとき,∞∞
𝐻(𝑠) = − 1𝑠 ∫0 𝜂′(𝑥)𝑥𝑠 𝑑𝑥, − ∫0 𝜂′(𝑥)𝑑𝑥 = 𝜂(0) = 1
より, 𝐻(𝑠) の 𝑠 = 0 での留数は 1 である. □カットオフ函数

2.3 Re s < 0 および s = 0 での様子

𝑎 > 0 は十分大きいと仮定し, 𝑏 < 0 であると仮定する. 𝑏 ≦ Re𝑡 < 𝑎 における 𝐻(𝑡) の極は 𝑡 = 0 だけであり, 𝑡 の函数としての 𝑍(𝑠 + 𝑡) の同じ範囲内の極の全体は 𝑠 + 𝑡 = 𝜌1 , 𝜌2 ,… であり, どれも1位の極であり, それぞれの留数は 𝑟1 , 𝑟2 ,… であると仮定する. このとき,と留数定理より,

𝑎+𝑖∞𝑍𝜂 (𝑁,𝑠) = 2𝜋𝑖1 ∫𝑎−𝑖∞ 𝐻(𝑡)𝑁 𝑡 𝑍(𝑠 + 𝑡)𝑑𝑡,
1 𝑏+𝑖∞ 𝐻(𝑡)𝑁 𝑡 𝑍(𝑠 + 𝑡)𝑑𝑡 = 𝑂(𝑁 𝑏 ) (𝑁 → ∞)2𝜋𝑖 ∫𝑏−𝑖∞∞𝑍𝜂 (𝑁,𝑠) = ∑ 𝑎𝑛 𝑛−𝑠 𝜂 ( 𝑁𝑛 ) = 𝑍(𝑠) + ∑ 𝑟𝑗 𝐻(𝜌𝑗 − 𝑠)𝑁 𝜌𝑗−𝑠 + 𝑂(𝑁 𝑏 ).
𝑛=1

𝑗𝑏 < 0 なので 𝑂(𝑁 𝑏 ) の項は 𝑁 → 0 で 0 に収束する. 𝑁 に関する定数項は 𝑍(𝑠) になり, カットオフ函数の取り方によらない.
特に 𝑠 = 0 のとき,∞𝑍𝜂 (𝑁,0) = ∑ 𝑎𝑛 𝜂 ( 𝑁𝑛 ) = 𝑍(0) + ∑ 𝑟𝑗 𝐻(𝜌𝑗 )𝑁 𝜌𝑗 + 𝑂(𝑁 𝑏 ).
𝑛=1

𝑗

3 滑らかなカットオフの例
3.1 ζ(s)の場合∞

𝑍(𝑠) = 𝜁(𝑠) = ∑ 𝑛−𝑠 のとき, 𝑡 の函数としての 𝜁(𝑠 + 𝑡) の極は 𝑠 + 𝑡 = 1 だけであり, そこでの留数は 1 なので, ある 𝑏 < 0が存在して,

𝑛=1

𝑛−𝑠 𝜂 ( 𝑁𝑛 ) = 𝜁(𝑠) + 𝐻(1 − 𝑠)𝑁 1−𝑠 + 𝑂(𝑁 𝑏 ).
∑𝑛=1
このように, 滑らかなカットオフは 𝑁 → ∞ における定数項 𝜁(𝑠) と発散項 𝐻(1 − 𝑠)𝑁 1−𝑠 と 0 に収束する項に分解される.
1 𝑠
2
例えば 𝜂(𝑥) = 𝑒−𝑥 のとき 𝐻(𝑠) = Γ ( ) であり, 𝐻(𝑠) の極は0以下の偶数にしかないので, 𝑏 = −1 に取れる:2 2∞

−𝑠 exp − 𝑛2 = 𝜁(𝑠) + 1 Γ 1 − 𝑠 𝑁 1−𝑠 + 𝑂(𝑁 −1 ).
𝑛∑( 𝑁2 )
2 ( 2 )∞

𝜂(𝑥) 𝑥 = 0

𝑛=1

1

𝛿>0

|𝑥| ≦ 𝛿

例えば,がの近傍で になるならば(すなわち, ある
が存在して
ならば
は幾らでも小さく取れて に収束する項の部分はについて急減少することになるIn [5]:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

0

𝑂(𝑁 𝑏 )

𝑁

𝜂(𝑥) = 1 となるならば), 𝑏# 実軸上のプロット​
eta(x) = exp(-x^2)
H(s) = gamma(s/2)/2
CutoffZeta(s; N=30, L=10^5) = (ss = float(s); sum(n-> n^(-ss)*eta(n/N), 1:L))
DivergentTerm(s; N=30) = (ss = float(s); H(1-ss)*N^(1-ss))
CutoffZeta0(s; N=30, L=10^5) = CutoffZeta(s; N=N, L=L) - DivergentTerm(s; N=N)​
PP = []
for s in [-6.2:0.1:-1.6, -2.0:0.05:0.95, 1.3:0.07:4.0, 3.8:0.07:10]
P = plot(title="N = 30", titlefontsize=10, xlabel="s")plot!(s, zeta.(s), label="\$\\zeta(s)\$")
plot!(s, CutoffZeta0.(s), label="\$\\sum\\,n^{-s}\\eta(n/N) - H(1-s)N^{1-s}\$", ls=:dpush!(PP, P)
endplot(PP[1:2]..., size=(720, 260), legend=:bottomleft)

Out[5]:

In [6]:



1 plot(PP[3:4]..., size=(720, 260), legend=:topright)

Out[6]:

In [7]:

Out[7]:

1
2
3
4
5
6
7
8

# ζ(0) = "1+1+1+…" = -1/2​
Ns = 0.1:0.01:1.2
y = (N->CutoffZeta0(0.0, N=N)).(Ns)plot(size=(350,200), xlabel="N", legendfontsize=9)
plot!(Ns, y, label="\$\\sum\\,\\eta(n/N) - H(1)N\$")
plot!(Ns, zeta(0.0)*fill(1,size(Ns)), label="\$\\zeta(0) = -1/2\$", ls=:dash)plot!(ylims=(-0.55,-0.05))

In [8]:



1
2
3
4
5
6
7
8

# ζ(-1) = "1+2+3+…" = -1/12​
Ns = 0.1:0.01:3.0
y = (N->CutoffZeta0(-1.0, N=N)).(Ns)P1 = plot(size=(350,200), xlabel="N", legendfontsize=9)
plot!(Ns, y, label="\$\\sum\\,n\\eta(n/N) - H(2)N^2\$")
plot!(Ns, zeta(-1.0)*fill(1,size(Ns)), label="\$\\zeta(-1) = -1/12\$", ls=:dash)plot!(ylims=(-0.13, 0))

1
2
3
4
5
6
7
8

# ζ(-2) = "1^2+2^2+3^2+…" = 0​
Ns = 0.1:0.01:1.65
y = (N->CutoffZeta0(-2.0, N=N)).(Ns)P1 = plot(size=(350,200), xlabel="N", legend=:bottomright, legendfontsize=9)
plot!(Ns, y, label="\$\\sum\\,n^2\\eta(n/N) - H(3)N^3\$")plot!(Ns, zeta(-2.0)*fill(1,size(Ns)), label="\$\\zeta(-2) = 0\$", ls=:dash)plot!(ylims=(-0.05, 0.002))

1
2
3
4
5
6
7
8

# ζ(-3) = "1^3+2^3+3^3+…" = 1/120​
Ns = 0.1:0.01:4
y = (N->CutoffZeta0(-3.0, N=N)).(Ns)P1 = plot(size=(350,200), xlabel="N", legendfontsize=9)
plot!(Ns, y, label="\$\\sum\\,n^3\\eta(n/N) - H(4)N^4\$")plot!(Ns, zeta(-3.0)*fill(1,size(Ns)), label="\$\\zeta(-3) = 1/120\$", ls=:dash)plot!(ylims=(-0.016, 0.023), legend=:bottomright)

Out[8]:

In [9]:

Out[9]:

In [10]:Out[10]:In [11]:



1
2
3
4
5
6
7
8
9
10
11
12
13

# critical line 上のプロット​#pyplot()t = 0.0:0.2:50.0
s = 0.5 .+ im .* t@time z = CutoffZeta.(s)w = z .- DivergentTerm.(s)P = plot(size=(500, 300))
plot!(legend=:topright, xlabel="t")
plot!(title="s = 0.5 + it,
N = 30", titlefontsize=10, legendfontsize=10)
plot!(t, abs.(zeta.(s)), label="\$\\left|\\zeta(s)\\right|\$")
plot!(t, abs.(z), label="\$\\left|\\sum n^{-s}\\eta(n/N)\\right|\$", ls=:dashdot)
plot!(t, abs.(w), label="\$\\left|\\sum n^{-s}\\eta(n/N) - H(1-s)N^{1-s}\\right|\$", ls=

1.458336 seconds (213.43 k allocations: 14.460 MiB, 8.14% compilation time)Out[11]:

𝐻(𝑠) (の絶対値)が虚軸方向に急減少するので,発散項 𝐻(1 − 𝑠)𝑁 1−𝑠 は 𝑠 の虚部が大きいときに無視できる. そのおかげで, 発∞𝑛−𝑠 𝜂 ( 𝑁𝑛 ) で Re𝑠 = 1/2, Im𝑠 > 10 における 𝜁(𝑠) をよく近似できる.
散項を引き去る前の滑らかなカットオフ∑
𝑛=1
3.2 極を持たない交代Dirichlet級数の場合
交代Drichlet級数

𝑍(𝑠) を𝑍(𝑠) = ∑ (−1)𝑛𝑠 = (1 − 21−𝑠 )𝜁(𝑠)
∞

𝑛−1

𝑛=1

と定める(2つ目の等号を自分で確認してみよ). たとえば,

𝜁(0) = − 12 , 𝜁(−1) = − 121 , 𝜁(−2) = 0, 𝜁(−3) = 1201 , …

より,

𝑍(0) = 12 , 𝑍(−1) = 14 , 𝑍(−2) = 0, 𝑍(−3) = − 18 , …
𝜁(𝑠) の極は 𝑠 = 1 のみであり, 𝑠 = 1 は 1 − 21−𝑠 の零点なので 𝑍(𝑠) は極を持たない. したがって, Re𝑠 ≦ 1 であっても,
𝑁→∞で
∞
𝑛−1
𝑍𝜂 (𝑁,𝑠) = ∑ (−1)𝑛𝑠 𝜂 ( 𝑁𝑛 ) = 𝑍(𝑠) + 𝑂(𝑁 −1 )𝑛=1が成立している. この場合には

3.2.1 η(x) = exp(-x^2) の場合

𝑁 → ∞ における発散項はなくなる. これを数値的に確認しよう.

In [12]:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 実軸上のプロット​
Z(s) = (ss = float(s); (1 - 2^(1-ss)) * zeta(ss))
eta(x) = exp(-x^2)
H(s) = gamma(s/2)/2
CutoffZ(s; N=50, L=10^5) = (ss = float(s); sum(n->(-1)^(n-1)*n^(-ss)*eta(n/N), 1:L))​
PP = []
for s in [-6.2:0.1:-1.6, -2.0:0.05:0.95, 1.3:0.07:4.0, 3.8:0.07:10]
y = Z.(s)ymax, ymin = maximum(y), minimum(y)P = plot(title="N = 50", titlefontsize=10, xlabel="s", legend=true, legendfontsize=8
plot!(s, Z.(s), label="\$ Z(s) = \\mathrm{ana. conti. of}\\; \\sum (-1)^{n-1}n^{-s}\$lw=1.5, ylim=(ymin, ymax+0.55*(ymax-ymin)))plot!(s, CutoffZ.(s), label="\$\\sum\\,(-1)^{n-1}n^{-s}\\exp(-n^2/N^2)\$", ls=:dash)push!(PP, P)
endplot(PP[1:2]..., size=(800, 320))

Out[12]:

In [13]:

Out[13]:

1 plot(PP[3:4]..., size=(800, 320))

In [14]:



1
2
3
4
5
6
7
8

# Z(0) = "1-1+1-1+…" = 1/2​
Ns = 0.1:0.01:2.0
y = (N->CutoffZ(0, N=N)).(Ns)plot(size=(350,200), xlabel="N")
plot!(Ns, y, label="\$\\sum\\,(-1)^{n-1}\\exp(-n^2/N^2)\$")
plot!(Ns, Z(0)*fill(1,size(Ns)), label="\$Z(0) = 1/2\$", ls=:dash)plot!(ylim=(-0.05, 0.55), legend=:bottomright)

1
2
3
4
5
6
7
8

# Z(-1) = "1-2+3-4+…" = 1/4​
Ns = 0.1:0.01:4.0
y = (N->CutoffZ(-1, N=N)).(Ns)plot(size=(350,200), xlabel="N")
plot!(Ns, y, label="\$\\sum\\,(-1)^{n-1}n\\,\\exp(-n^2/N^2)\$")
plot!(Ns, Z(-1)*fill(1,size(Ns)), label="\$Z(-1) = 1/4\$", ls=:dash)plot!(legend=:bottomright)

1
2
3
4
5
6
7
8

# Z(-2) = "1-4+9-16+…" = 0​
Ns = 0.1:0.01:4
y = (N->CutoffZ(-2, N=N)).(Ns)plot(size=(350,200), xlabel="N")
plot!(Ns, y, label="\$\\sum\\,(-1)^{n-1}n^2\\exp(-n^2/N^2)\$")
plot!(Ns, Z(-2)*fill(1,size(Ns)), label="\$Z(-2) = 0\$", ls=:dash)plot!(ylim=(-0.05, 0.35))

Out[14]:

In [15]:

Out[15]:

In [16]:

Out[16]:

In [17]:



1
2
3
4
5
6
7

# Z(-3) = "1-8+27-64+…" = -1/8​
Ns = 0.1:0.01:4.0
y = (N->CutoffZ(-3, N=N)).(Ns)plot(size=(350,200), xlabel="N")
plot!(Ns, y, label="\$\\sum\\,(-1)^{n-1}n^3\\exp(-n^2/N^2)\$")
plot!(Ns, Z(-3)*fill(1,size(Ns)), label="\$Z(-3) = -1/8\$", ls=:dash)

1
2
3
4
5
6
7
8
9
10
11

# critical line 上のプロット​
t = 0.0:0.1:50.0
s = 0.5 .+ im .* t@time z = CutoffZ.(s)P = plot(size=(500, 300))
plot!(legend=:topright, xlabel="t")
plot!(title="s = 0.5 + it,
N = 30", titlefontsize=10)
plot!(t, abs.(Z.(s)), label="\$\\left|Z(s)\\right|=\\left|(1-2^{1-s})\\zeta(s)\\right|\$
plot!(t, abs.(z),label="\$\\left|\\sum (-1)^{n-1}n^{-s}\\exp(-n^2/N^2)\\right|\$", lplot!(ylim=(-0.1, 6.2), legendfontsize=10)

Out[17]:

In [18]:

4.753610 seconds (135.78 k allocations: 9.335 MiB, 1.35% compilation time)Out[18]:3.2.2 η(x) = exp(-x) の場合

𝜂(𝑥) = exp(−𝑥) のとき, 𝑟 = exp(−1/𝑁) とおくと, 0 < 𝑟 < 1 でかつ 𝑁 → ∞ のとき 𝑟 → 1 となり,

カットオフ函数がなので𝜂(𝑛/𝑁) = 𝑟𝑛

∞
∞
𝑛−1
𝑛−1
𝑍𝜂 (𝑠,𝑁) = ∑ (−1)𝑛𝑠 𝜂 ( 𝑁𝑛 ) = ∑ (−1)𝑛𝑠 𝑟𝑛𝑛=1となる. ゆえに𝑁 → ∞ のときの 𝑍𝜂 (𝑠,𝑁) の収束先はAbel総和法の意味でのAbel和になる. したがって∞
𝑛−1
𝑍𝜂 (𝑁,𝑠) = ∑ (−1)𝑛𝑠 𝜂 ( 𝑁𝑛 ) = 𝑍(𝑠) + 𝑂(𝑁 𝑏 ), −1 < 𝑏 < 0𝑛=1

はAbel和が𝑛=1

𝑍(𝑠) に一致することを意味している.

In [19]:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 実軸上のプロット​
Z(s) = (ss = float(s); (1 - 2^(1-ss)) * zeta(ss))
eta(x) = exp(-x)H(s) = gamma(s)CutoffZ(s; N=200, L=10^5) = (ss = float(s); sum(n->(-1)^(n-1)*n^(-ss)*eta(n/N), 1:L))​
PP = []for (s, N) in [(-6.2:0.1:-1.6, 50), (-2.0:0.05:0.95, 100), (1.3:0.07:4.0, 500), (3.8:0.0
P = plot(title="N = $N", titlefontsize=10, xlabel="s")y = Z.(s)ymax, ymin = maximum(y), minimum(y)z = CutoffZ.(s, N=N)
zmax, zmin = maximum(z), minimum(z)yzmax, yzmin = max(ymax, zmax), min(ymin, zmin)
plot!(s, y, label="\$ Z(s) = \\mathrm{ana. conti. of}\\; \\sum (-1)^{n-1}n^{-s}\$")
plot!(s, z, label="\$\\sum\\,(-1)^{n-1}n^{-s}\\exp(-n/N)\$", ls=:dash)plot!(ylim=(yzmin, yzmax + 0.5*(yzmax-yzmin)))push!(PP, P)
endplot(PP[1:2]..., size=(800, 320), legend=:topleft)

Out[19]:In [20]:Out[20]:

1 plot(PP[3:4]..., size=(800, 320), legend=:topleft)

In [21]:



1
2
3
4
5
6
7
8

# Z(0) = "1-1+1-1+…" = 1/2​
Ns = 0.1:0.1:20.0
y = (N->CutoffZ(0, N=N)).(Ns)plot(size=(350,200), xlabel="N")
plot!(Ns, y, label="\$\\sum\\,(-1)^{n-1}\\exp(-n/N)\$")
plot!(Ns, Z(0)*fill(1,size(Ns)), label="\$Z(0) = 1/2\$", ls=:dash)plot!(ylim=(-0.05, 0.55), legend=:bottomright)

1
2
3
4
5
6
7
8

# Z(-1) = "1-2+3-4+…" = 1/4​
Ns = 0.1:0.1:5.0
y = (N->CutoffZ(-1, N=N)).(Ns)plot(size=(350,200), xlabel="N")
plot!(Ns, y, label="\$\\sum\\,(-1)^{n-1}n\\,\\exp(-n/N)\$")
plot!(Ns, Z(-1)*fill(1,size(Ns)), label="\$Z(-1) = 1/4\$", ls=:dash)plot!(ylim=(-0.025, 0.275), legend=:bottomright)

1
2
3
4
5
6
7
8

# Z(-2) = "1-4+9-16+…" = 0​
Ns = 0.1:0.1:50.0
y = (N->CutoffZ(-2, N=N)).(Ns)plot(size=(350,200), xlabel="N")
plot!(Ns, y, label="\$\\sum\\,(-1)^{n-1}n^2\\exp(-n/N)\$")
plot!(Ns, Z(-2)*fill(1,size(Ns)), label="\$Z(-2) = 0\$", ls=:dash)plot!(ylim=(-0.01, 0.11))

Out[21]:

In [22]:Out[22]:

In [23]:

Out[23]:

In [24]:



1
2
3
4
5
6
7

# Z(-3) = "1-8+27-64+…" = -1/8​
Ns = 0.1:0.01:8.0
y = (N->CutoffZ(-3, N=N)).(Ns)plot(size=(350,200), xlabel="N")
plot!(Ns, y, label="\$\\sum\\,(-1)^{n-1}n^3\\exp(-n/N)\$")
plot!(Ns, Z(-3)*fill(1,size(Ns)), label="\$Z(-3) = -1/8\$", ls=:dash)

1
2
3
4
5
6
7
8
9
10
11

# critical line 上のプロット​
t = 0.0:0.1:50.0
s = 0.5 .+ im .* t@time z = CutoffZ.(s)P = plot(size=(500, 300))
plot!(legend=:topright, xlabel="t")
plot!(title="s = 0.5 + it,
N = 200", titlefontsize=10)
plot!(t, abs.(Z.(s)), label="\$\\left|Z(s)\\right|=\\left|(1-2^{1-s})\\zeta(s)\\right|\$
plot!(t, abs.(z),label="\$\\left|\\sum (-1)^{n-1}n^{-s}\\exp(-n/N)\\right|\$", ls=:dplot!(ylim=(-0.1, 6.2), legendfontsize=10)

Out[24]:

In [25]:

4.747115 seconds (109.61 k allocations: 7.578 MiB, 0.27% gc time, 1.24% compilation time:
100% of which was recompilation)
Out[25]:

3.3 -ζ'(s)の場合∞

𝑍(𝑠) = −𝜁 ′(𝑠) = − ∑ 𝑛−𝑠 log𝑛 の場合を考える. −𝜁 ′(𝑠) は 𝑠 = 1 で
𝑛=1−𝜁 ′(𝑠) = (𝑠 −1 1)2 + 𝛾1 + 𝛾2 (𝑠 − 1) + ⋯とLaurent展開される. 𝑠 = 1 で2位の極なので上で作った公式をそのまま使用することはできないが, 同様の議論によって次が得られる. ある 𝑏 < 0 が存在して,∞𝑛∑ 𝑛−𝑠 log𝑛 ⋅ 𝜂 ( 𝑁 ) = −𝜁 ′(𝑠) + 𝐻(1 − 𝑠)𝑁 1−𝑠 log𝑁 + 𝐻 ′(1 − 𝑠)𝑁 1−𝑠 + 𝑂(𝑁 𝑏 ).
𝑛=1

特に

𝑠 = 0 のとき,log𝑛 ⋅ 𝜂 ( 𝑁𝑛 ) = −𝜁 ′(0) + 𝐻(1)𝑁 log𝑁 + 𝐻 ′(1)𝑁 + 𝑂(𝑁 𝑏 ).
∑𝑛=1
すなわち, 左辺から発散項を除いて残る定数項はカットオフ函数 𝜂(𝑥) の取り方によらず −𝜁 ′ (0) であることがわかる.
∞

−𝜁 ′(0) = log √⎯2𝜋⎯⎯⎯であることがよく知られている. 以上の内容は本質的に階乗に関するStirlingの近似公式であるとも考えられる.
In [26]:



1
2
3
4
5
6

H(s) = gamma(s/2)/2
s = symbols("s")
diff(H(s), s) |> display
H1(s) = gamma(s/2)*digamma(s/2)/4
H1(Sym(1)) |> display@show H1(1);Γ ( 𝑠2 ) polygamma (0, 𝑠2 )4⎯⎯√𝜋 (−2log(2) − 𝛾)4

H1(1) = -0.8700577267283156
In [27]:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

eta(x) = exp(-x^2)
CutoffLogSum(N; L=10^6) = sum(n->log(n)*eta(n/N), 1:L)
ApproxSum(N) = log(√(2π)) + H(1)*N*log(N) + H1(1)*N​[(N, CutoffLogSum(N), ApproxSum(N)) for N in 1:10] |> display​
PP = []
for Ns in [1:10, 1:100]
P = plot(legend=:topleft, xlabel="N")y = CutoffLogSum.(Ns)ymin, ymax = extrema(y)plot!(Ns, y, label="\$\\sum\\log(n)\\eta(n/N)\$")
plot!(Ns, ApproxSum.(Ns), label="\$\\log(\\sqrt{2\\pi}) + H(1)N\\log N + H'(1)N\$", lplot!(ylims=(ymin-0.05*(ymax-ymin), ymax+0.5*(ymax-ymin)), legendfontsize=9)
push!(PP, P)
endplot(PP..., size=(800,300))

10-element Vector{Tuple{Int64, Float64, Float64}}:(1, 0.012831169012422277, 0.048880806476357064)(2, 0.3995159634036108, 0.4073944691758178)(3, 1.2261908764026275, 1.2296247255725965)(4, 2.3510743165496337, 2.352993184002515)(5, 3.6990615746151443, 3.700285963780984)(6, 5.225176194291497, 5.2260250862238475)(7, 6.899537158236067, 6.900160226338723)(8, 8.700856657011794, 8.70133339251146)(9, 10.61319871080199, 10.613575227967056)(10, 12.624185456748245, 12.624490341496182)
Out[27]:

3.4 -(d/ds)log ζ(s)の場合′ (𝑠)𝑍(𝑠) = − 𝑑𝑠𝑑 log𝜁(𝑠) = − 𝜁𝜁(𝑠)の場合を考えよう. 𝜁(𝑠) はEuler積表示
𝜁(𝑠) = ∏(1 − 𝑝−𝑠 )−1 (Re𝑠 > 1)𝑝を持つ. ここで𝑝 は素数全体を走る. これより, 非常によく使われる対数函数のTayloe展開∞ 𝑘−log(1 − 𝑥) = ∑ 𝑥𝑘 (|𝑥| < 1)
𝑘=1

より

∞ −𝑘𝑠 ∞−𝑠log𝜁(𝑠) = − ∑ log(1 − 𝑝−𝑠 ) = ∑ ∑ 𝑝 𝑘 = ∑ Λ(𝑛)log𝑛 𝑛 .
𝑝 𝑘=1

𝑝

ここで

𝑛=1

Λ(𝑛) は所謂 von Mangoldt 函数である:(𝑛 = 𝑝𝑘 , 𝑝 is prime, 𝑘 ∈ ℤ>0 ),Λ(𝑛) = { log𝑝0 (otherwise).

ゆえに

∞
∞
′ (𝑠)
− 𝑑𝑠𝑑 log𝜁(𝑠) = − 𝜁𝜁(𝑠)= ∑ ∑ 𝑝−𝑘𝑠 log𝑝 = ∑ Λ(𝑛)𝑛−𝑠 .
𝑝 𝑘=1

𝑛=1

𝑍(𝑠) = − 𝑑𝑠𝑑 log𝜁(𝑠) の極はすべて1位であり, それら全体は 𝜁(𝑠) の極と零点の全体に一致する. ゆえに′ (0)𝜁(0) = − 12 , −𝜁 ′(0) = log √⎯2𝜋⎯⎯⎯, − 𝜁𝜁(0)= −log(2𝜋)より, 𝑎 = 2, 𝑏 = −1 とすると,∞
𝑛 = −log(2𝜋) + 𝐻(1)𝑁 − ∞ 𝐻(𝜌𝑗 )𝑁 𝜌𝑗 + 𝑂(𝑁 −1 ).
Λ(𝑛)𝜂
(
∑
∑
𝑁)
𝑛=1

ここで,

𝜌𝑗 は 0 ≦ Re𝑠 ≦ 1 における 𝜁(𝑠) の零点の全体である.

𝑗=1

In [28]:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

# von Mangoldt 函数 Λ(n) のカットオフを入れた和の計算​
eta(x) = exp(-x^2)
Eta(x) = gamma(x/2)/2​
function vonMangoldtCutoffSum(N; L=10^6)c = 0.0
for p in primes(L)for k in 1:floor(Int,log(p,L))
c += log(p) * eta(p^k/N)
end
end
c
end
​
ApproximateCutoffSum(N) = -log(2π) + Eta(1)*N@show log(2π)@show Eta(1)​[(N, vonMangoldtCutoffSum(N), ApproximateCutoffSum(N)) for N in 1:10] |> display​
PP = []
for Ns in [1:10, 1:100]
P = plot(legend=:topleft, xlabel="N")y1 = vonMangoldtCutoffSum.(Ns)y2 = ApproximateCutoffSum.(Ns)ymin, ymax = extrema([y1;y2])
plot!(Ns, y1, label="\$\\sum\\,\\Lambda(n)\\eta(n/N)\$")
plot!(Ns, y2, label="\$-\\log(2\\pi)+H(1)N\$", ls=:dash)plot!(ylims=(ymin-0.05*(ymax-ymin), ymax+0.3*(ymax-ymin)), legendfontsize=9)
push!(PP, P)
endplot(PP..., size=(800,300))log(2π) = 1.8378770664093453
Eta(1) = 0.886226925452758
10-element Vector{Tuple{Int64, Float64, Float64}}:(1, 0.01283109100898279, -0.9516501409565873)(2, 0.3865992514602825, -0.06542321550382924)(3, 1.0749210815651769, 0.8208037099489287)(4, 1.8701182113490993, 1.7070306354016869)(5, 2.707401571263402, 2.593257560854445)(6, 3.5640709863296416, 3.4794844863072028)(7, 4.431251899911122, 4.365711411759961)(8, 5.304277825354532, 5.251938337212719)(9, 6.1809378197101275, 6.138165262665477)(10, 7.060149196555291, 7.024392188118235)
Out[28]:𝜌𝑗 を 0 ≦ Re𝑠 ≦ 1 における 𝜁(𝑠) の虚部の絶対値が 𝑗 番目に小さな零点であるとするとし, 𝜓(𝑥) を𝜓(𝑥) = ∑ Λ(𝑛),1≦𝑛≦𝑥𝜓(𝑥 − 0) + 𝜓(𝑥 − 0) で訂正したものを 𝜓∗ (𝑥) と書くと,と定め, 𝜓(𝑥) の不連続点 𝑥 における値を2∞ 𝜌𝜓∗ (𝑥) = −log(2π) + 𝑥 − ∑ 𝑥𝜌𝑗𝑗 − 12 log(1 − 𝑥2 )
注意:

𝑗=1

𝑥𝜌𝑗 の係数が 1/𝜌𝑗 であり, 𝜌𝑗 の∞ 𝑥𝜌𝑗
虚部についてゆっくり減少する函数になってしまっている. そのためは足し上げる順序に依存する条件収束級数になっ∑
𝑗=1 𝜌𝑗が成立することがよく知られている(von Mangoldtの明示公式). こちらの明示公式の場合にはている. それに対して, 上で示した𝑛∑ Λ(𝑛)𝜂 ( 𝑁 ) = −log(2𝜋) + 𝐻(1)𝑁 − ∑ 𝐻(𝜌𝑗 )𝑁 𝜌𝑗 + 𝑂(𝑁 −1 )
∞

∞

𝑛=1

𝑗=1

𝐻(𝑠) は 𝑠 の虚部の函数として急減少函数になっている点が大きく違う.
0 ≦ Re𝑠 ≦ 1, 0 ≦ Im𝑠 ≦ 𝑇 を満たす 𝜁(𝑠) の(重複度を含めた)零点の個数 𝑁(𝑇) については𝑁(𝑇) = 2𝜋𝑇 log 2𝜋𝑇 − 2𝜋𝑇 + 𝑂(log𝑇)が成立することが知られている. □におけるIn [29]:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

# ψ(x) = Σ_{n≦x} Λ(n) と -log(2π) + x をプロットして比較​
function psi(x)c = 0.0
for p in primes(floor(Int,x))
for k in 1:floor(Int,log(p,x))c += log(p)
end
end
c
end
​
approxpsi(x) = -log(2π) + x​[(N, psi(N), approxpsi(N)) for N in 1:10] |> display​
PP = []
for x in [1:0.05:12, 1:0.5:120]
P = plot(legend=:topleft, xlabel="x")
plot!(x, psi.(x), label="\$\\psi(x)=\\sum_{n\\leq x}\\,\\Lambda(n)\$")
plot!(x, approxpsi.(x), label="\$-\\log(2\\pi)+x\$", ls=:dash)push!(PP, P)
endplot(PP..., size=(800,300))

10-element Vector{Tuple{Int64, Float64, Float64}}:(1, 0.0, -0.8378770664093453)(2, 0.6931471805599453, 0.16212293359065466)(3, 1.791759469228055, 1.1621229335906547)(4, 2.4849066497880004, 2.1621229335906547)(5, 4.0943445622221, 3.1621229335906547)(6, 4.0943445622221, 4.162122933590655)(7, 6.040254711277414, 5.162122933590655)(8, 6.733401891837359, 6.162122933590655)(9, 7.832014180505469, 7.162122933590655)(10, 7.832014180505469, 8.162122933590656)
Out[29]:𝑥 が成立するという結果は素数定理と呼ばれている. 𝜓(𝑥) ∼ 𝑥 と𝑥 以下の素数の個数を 𝜋(𝑥) と書くとき, 𝜋(𝑥) ∼ log𝑥素数定理は同値である. 上にプロットした結果はさらに定数項が −log(2𝜋) になることを意味している. □注意:4 Riemannのゼータ函数の非自明な零点の分布
http://www.dtc.umn.edu/~odlyzko/zeta_tables/index.html (http://www.dtc.umn.edu/~odlyzko/zeta_tables/index.html) にRiemannのゼータ函数の非自明な零点の虚部のリストが置いてある.
それを用いて, 虚部がIn [30]:

0 以上 𝑇 以下の非自明な零点の個数 𝑁(𝑇) の個数をプロットしてみよう. 次の漸近挙動が知られている:
𝑁(𝑇) ∼ 2𝜋𝑇 log 2𝜋𝑇 − 2𝜋𝑇 .

1 res = HTTP.get("http://www.dtc.umn.edu/~odlyzko/zeta_tables/zeros1",
2
readtimeout=60, retry=true, retries=20)
3 zetazeros = parse.(Float64, split(String(res.body), "\n")[1:end-1])
4 zetazeros[1:10]

Out[30]: 10-element Vector{Float64}:
14.134725142
21.022039639
25.01085758
30.424876126
32.935061588
37.586178159
40.918719012
43.327073281
48.005150881
49.773832478
In [31]:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# NZeros(T) = N(T) のプロット​
NZeros(T) = count(zetazeros .≤ T)
AZeros(T) = T/(2π)*log(T/(2π)) - T/(2π)
maxT = maximum(zetazeros)​
PP = []
for T in [0:100, 0:maxT/200:maxT]P = plot(legend=:topleft, xlabel="T")
plot!(title="N(T)", titlefontsize=10)
plot!(T, NZeros.(T), label="\$N(T)\$")
plot!(T, AZeros.(T), label="\$\\frac{T}{2\\pi}\\log\\frac{T}{2\\pi} - \\frac{T}{2\\p
ls=:dash)plot!(legendfontsize=10)
push!(PP, P)
endplot(PP..., size=(800,300))

Out[31]:

In [ ]:



1 ​