ベルヌーイ数

ベルヌーイ数

ベルヌーイ数

 $x/(e^x-1)$ をマクローリン級数展開して
 
\[\frac{x}{e^x-1}=\sum_{n=0}^{\infty}\frac{B_n x_n}{n!}\]
と表したとき、係数 $B_n$ を ベルヌーイ数 (Bernoulli number) とよびます。上記のような形 ($a_n/n!$ の形) で数列 $a_n$ が関数 $f(x)$ の展開式に含まれるとき、$f(x)$ は $a_n$ の指数型母関数であるといいます。つまり、ベルヌーイ数は指数型母関数 $x/(e^x-1)$ から生成される数列です。

 ベルヌーイ数を母関数から求めるのは困難ですが、漸化式
 
\[B_0=1,\quad B_n=-\frac{1}{n+1}\sum_{k=0}^{n-1}\binom{n+1}{k}B_k\]
を使えば計算が多少は楽になります。それでも手計算したいと思う人はあまりいないはずです。論文執筆などで計算間違いをすると目も当てられないので、Python の拡張ライブラリを積極的に活用しましょう。

sympy.bernoulli()

 SymPy の sympy.bernoulli() を使うと、ベルヌーイ数を有理数の形で得ることができます。

# PYTHON_BERNOULLI_01

import sympy

# n=0~9のベルヌーイ数を取得
bn = [sympy.bernoulli(n) for n in range(10)]

print(bn)
[1, -1/2, 1/6, 0, -1/30, 0, 1/42, 0, -1/30, 0]

 $B_{2k+1}\ (k\geq 1)$ はすべて $0$ です。
 

scipy.special.bernoulli()

 Scipy の scipy.special.bernoulli() は引数 n を受け取って、0 から n までのベルヌーイ数を浮動小数点数型で返します。

# PYTHON_BERNOULLI_02

from scipy.special import bernoulli

# n=0~10までのベルヌーイ数を取得
bn =bernoulli(10)

print(bn)
[ 1.         -0.5         0.16666667  0.         -0.03333333  0.
  0.02380952  0.         -0.03333333  0.          0.07575758]