いろいろな言語での関数, 手続き, サブルーチンの例

Riemann zeta 関数
$\displaystyle{\zeta(s)=\sum_{k=1}^\infty \frac{1}{k^s}}$
を素朴に近似計算

C言語版

これをファイル myzeta.c に貼り付けて保存. コンパイル, 実行は
cc myzeta.c -lm
./a.out

python 版

これをファイル myzeta.py に貼り付けて保存. インタプリタによる実行は
python <myzeta.py
または
python3 <myzeta.py
ファイルの入力間違いなどで強制終了したいときは ctrl-C

Java 版

これをファイル myzeta.java に貼り付けて保存. コンパイル, 実行は
javac myzeta.java
java myzeta

R版

これをファイル myzeta.r に貼り付けて保存. インタプリタによる実行は
 R --no-save <myzeta.r
R では R を起動したあと
source("myzeta.r");
で実行する方法の方がよく使われる.

数学ソフトウエアでは zeta 関数の計算はあらかじめ組み込まれている

  1. Maxima (maxima でインタプリタがスタート)
      bfzeta(3,5);
    
    s=3 で 5 の部分は小数点以下の桁数
  2. Risa/Asir (openxm asir でインタプリタがスタート)
      setprec(100);
      pari(zeta,3);
    
    setprec で欲しい桁数を指定.
  3. Mathematica (購入が必要)
      N[Zeta[3],100]
    
    100 桁の近似値.
  4. Sage math (sage でインタプリタがスタート)
      zeta(3).n(digits=100)
    
などなど.

Euler 積表示での値と比べる

Euler 積とは
$\displaystyle{ \zeta(s)=\prod_{p: \mbox{prime number}} \left(\frac{1}{1-\frac{1}{p^s}} \right) }$

python 版

sympy ライブラリをまずインストール.
  1. python3 では
    sudo apt install python3-sympy
    
  2. python2 では
    sudo apt install python-sympy
    
  3. apt でインストールできない時は
    pip install sympy
    
    pip3 install sympy
    
このプログラムを myzeta2.py へ貼り付けて保存. インタプリタで次のように実行.
python <myzeta2.py
または
python3 <myzeta2.py

Risa/Asir 版

このプログラムを myzeta2.rr へ貼り付けて保存. インタプリタでの実行は
openxm asir <myzeta2.rr
なおファイルの入力間違いなどで強制終了したいときは ctrl-C でなく, ctrl-Z それから kill %%
asir ではプログラム中から
load("myzeta2.rr");
で実行する方法の方がよく使われる.

Mathematica による zeta 関数のグラフ

s の実部を 1/2, 虚部を [0,50] で動かす.

参考: zeta 関数の効率的数値計算法

  1. 大島利雄, 自然数の負の奇数ベキの無限和の収束とその誤差 , $\zeta(奇数)$ の初等的高速計算法.
  2. stack exchange の記事 (専門的).
  3. Ghaith Ayesh Hiary, Fast methods to compute the Riemann zeta function (2011) , 専門論文の例.