0
0

リーマンのξ関数を手実装で計算してプロットする - JavaScript

Posted at

ライブラリを使わずにゼータ(ζ)関数、クシー(ξ)関数を計算する。($0<\Re(s)<1$)
$$\xi(s)=\frac{1}{2}s(s-1)\pi^{-\frac{s}{2}}\Gamma\left(\frac{s}{2}\right)\zeta(s)$$

プログラム

$s=c+ki\ \ (0<c<1)$に対する$\zeta(s)$または$\xi(s)$の実部(赤)と虚部(青)をプロットする。(右側は極座標表示)
Absoluteをチェックすると絶対値をプロットする。
$|\xi(s)|$は$s$の虚部$k$が大きくなると指数関数的に小さくなっていくため、描画スケールを調整してある。($\zeta(s)$のプロットに関しても$k$に応じて若干描画スケールを補正している。)

検算はあまり真面目にやってないので、バグがある可能性あります。(何個かゼロ点が合っていることは確認していますが、Pythonのライブラリなどの計算結果との比較はしていない。)

See the Pen Riemann Xi-function by kob58im (@kob58im) on CodePen.

ガンマ関数の計算

Lanczos近似を使って計算している。(下記のPythonプログラムを移植。虚部の切り捨て処理は誤差が増える要因となったので削除して使用している。)

ゼータ関数の計算

オイラー・マクローリン(Euler & Maclaurin)の和公式を使ってリーマンのゼータ関数を計算している。

$$ \zeta(s)=\lim_{n\to\infty}\left(\sum_{k=1}^n\frac{1}{k^s}\ -\frac{1}{1-s}n^{1-s}-\frac{1}{2}n^{-s}+\sum_{j=1}^m\frac{B_{2j}}{(2j)!}(s)_{2j-1}n^{-s-2j+1}\right) $$
$(s\neq 1, \ \Re(s)>-2m-1)$

に$m=1$を代入した下記の式を使用。

$$ \zeta(s)\simeq \sum_{k=1}^n\frac{1}{k^s}\ \ -\ \frac{1}{1-s}n^{1-s}-\frac{1}{2}n^{-s}+\frac{s}{12}n^{-1-s} $$

$n$をどの程度にすればよいかが判断できなかったので、プログラム内でスライダーを使って調整できるようにしてある。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0