Pythonプログラミング(ステップ7・補足・ガンマ関数)
このページでは、統計分布などにしばしば登場するガンマ関数について説明する。
積分で定義されるガンマ関数
積分を使って「新しい」関数を定義する例はたくさんある。
例えば、正規分布
これは、積分範囲を「可動」にして、関数を生成する例であるが、
被積分関数の中に「可動」な変数を入れて、関数を生成することもできる。
その代表的な例がガンマ関数で、以下のように定義される:
階乗の一般化
では、ガンマ関数の値を計算してみよう。
しかしながら、
このように、ガンマ関数は、階乗を実数、さらには複素数に拡張したものと考えることができる。
すると、自然数
しかしながら、そのような関数のうち、
ガンマ関数の近似:スターリングの式
統計学や物理学などでは、大きな
ここで、
ここまでをまとめると、スターリングの式として知られる
math.gamma( )
Pythonでは、ガンマ関数は数学ライブラリとして用意されており、積分を行わずとも、import math
しておけば、math.gamma( )
で呼び出すことができる。以下に、ガンマ関数の値とスターリングの近似値のそれぞれ対数を計算し、比較してプロットするコードの例を示す。
実行には、matplotlibとNumPyが必要。
# coding: utf-8 import matplotlib.pyplot as plt import numpy as np import math xdata = np.arange(1,10,0.01) n = xdata.shape[0] log_gamma = np.empty(n) log_stirling = np.empty(n) for i in range(n): x = xdata[i] log_gamma[i] = math.log(math.gamma(x+1)) log_stirling[i] = (x+1/2)*math.log(x) - x + 1/2*math.log(2*math.pi) plt.title("GAMMA FUNCTION") plt.plot(xdata,log_gamma, color=(1.0,0,0.0), linewidth=1.0) plt.plot(xdata,log_stirling, color=(0.0,0,1.0), linewidth=1.0) plt.xlim(0,10) plt.xlabel('X') plt.ylabel('LOG GAMMA(X)') plt.grid(True) plt.show()
赤がガンマ関数、青がスターリングの式。
スターリングの式は、
ベータ関数
ガンマ関数の親戚で、統計学などでよく登場する二変数の関数にベータ関数がある。
ベータ関数はいろいろな定義(表現)が可能であるが、ひとまず、ガンマ関数との関係
math.gamma(x)*math.gamma(y)/math.gamma(x+y)
で計算が可能である。