スターリングの公式
スターリングの公式とは、十分大きな自然数 $n$ に対して、$n$ の階乗 $n!$ の近似値を与える公式です。すなわち、$n$ が十分大きいとき、$n! \sim \sqrt{2\pi \vphantom{I} \,} \, n^{n + \frac{1}{2}} e^{-n}$ が成り立ちます。
ここでは、スターリングの公式の導き方や近似の精度を評価する方法を示します。スターリングの公式は、統計学だけでなく、統計力学や計算機科学などの応用においても重要な公式です。
スターリングの公式
まず、スターリングの公式の意味や導き方を示します。
定理 1.3(スターリングの公式)
自然数 $n$ が十分大きいとき、次が成り立つ。
解説
スターリングの公式とは:$n!$ の近似式
スターリングの公式($\text{Stirling’s}$ $\text{formula}$)は、自然数 $n$ の階乗 $n!$ の近似値を与える公式です。
すなわち、$n$ が十分大きいとき、$n$ の階乗は (1.1.15)式の値に漸近します。
スターリングの公式の導き方
スターリングの公式を導く際の、基本的な考え方を示します。より詳しい証明については [3], [9] などを参照してください。
階乗の対数($\ln n!$)
まず、$n!$ の値を評価するため、その対数 $\ln n!$ について考えます。対数を取ることで、下記のような和に分解でき、より扱いやすい形になるためです。
すなわち、対数の基本的な性質より、$\ln n!$ について、次が成り立ちます。
$\ln x$ と $x$ 軸に挟まれる領域の面積
いま、閉区間 $[\, 1, n \,]$ において $y = \ln x$ と $x$ 軸に挟まれる領域の面積を $S$ として、これを $2$ 通りの方法で求めます。
($1$)長方形の面積の和(近似)
($2$)$\ln x$ の定積分
(1)長方形の面積の和(近似)
$S$ を、下図のような長方形の面積の和で近似します。

このとき、次が成り立ちます。
- $\ln 1 = 0$ であるため、右辺の和は $\ln 2$ からはじまります。
- $\ln n$ に対応する長方形のみ、幅が $\displaystyle\frac{\, 1 \,}{\, 2 \,}$ となります。
ここで、$\delta_{n}$ は $S$ と長方形の面積の和の誤差を表します。$n \to + \infin$ のとき $\delta_{n}$ は収束します。このことは、$\ln x$ が上に凸であることから導けます( [3], [9] などを参照)。
(2)$\ln x$ の定積分
また、$S$ は、$\ln x$ の定積分により、次のように求められます。
$n!$ の近似式
以上から、次が成り立ちます。
両辺に $n$ を掛けることで、$n!$ に関する、次の近似式が得られます。
近似式の定数
上記の近似式において、$A = e^{1 - \delta_{n}}$ としています。誤差 $\delta_n$ が収束することから、十分大きな $n$ に対して、$A$ も一定値に収束するといえます。
実際に、ウォリスの公式($\text{Wallis’}$ $\text{formula}$)などを用いることで、$n \to +\infin$ のとき、$A$ が $\sqrt{2\pi \vphantom{I} \,}$ に収束することが導けます( [3], [9] などを参照)。
以上から、スターリングの公式を(簡易的に)導くことができました。
より詳しい証明については [3], [9] などを参照してください。
歴史的な経緯
スターリングの公式は、はじめ、ド・モアブルによって次のような形で発見されました($1730$ 年)。
同年、スターリングは上式の定数 $C$ が $\sqrt{2\pi \vphantom{I} \,}$ に収束することを示し、ド・モアブルに伝えました。ド・モアブルは、スターリングによる指摘を反映して公式を証明し、その功績をスターリングに帰しました( [8] を参照)。
このような経緯から、この近似式をスターリングの公式と呼ぶというわけです。
解析学におけるスターリングの公式
解析学において、スターリングの公式はガンマ($\varGamma \,$)関数の漸近近似として導出されます。
これは、自然数 $n$ の階乗 $n!$ の近似式( (1.1.15)式)の拡張ともいえる公式です。
ガンマ関数とは
ガンマ関数とは、次のような広義積分により定義される関数です。
ガンマ関数は、自然数 $n$ に対して定義される階乗 $n!$ を連続変数 $x$ に対して拡張したものです。
ガンマ関数は数学の様々な問題に登場する特殊関数であり、統計学においては、指数分布を一般化したガンマ($\varGamma \,$)分布や、カイ $2$ 乗($\chi^2$)分布の確率密度関数の定義などに現れます。
ガンマ関数の基本的性質
ガンマ関数の基本的な性質として、次のような関係式が成り立ちます。
($1$)が成り立つことは、部分積分法により確かめられます。
($2$)は、 ガンマ関数の定義より明らかといえます。
($3$)が成り立つことは、($1$)と($2$)から導かれます。
より詳しいガンマ関数の性質については、解析学の教科書( [9] など)を参照してください。
$n!$ の近似式との対応
連続変数 $x$ に関するスターリングの公式( (1.1.16)式)において、$x=n$ と限定することで、次の式が得られます。
ガンマ関数の基本的性質より $n! = \varGamma \, (n+1) = n \, \varGamma \, (n)$ であることから、上式の両辺に $n$ を掛けると、次のようになります。
これは、自然数 $n$ に関するスターリングの公式( 定理 1.3(スターリングの公式)の (1.1.15)式)に他なりません。
スターリングの公式の別形
スターリングの公式は、$n$ の階乗の対数($\ln n!$)の近似式の形で示されることもあります。
(1.1.15)式の両辺の対数を取ることで、次の式が得られます。
十分大きな $n$ において、右辺の第 $3$ 項は他の項に比べて小さいため、これを無視すると、次のようになります。
(1.1.18)式は (1.1.15)式に比べて精度が落ちるものの扱いやすく、統計力学や計算機科学などの応用において便利です( 例 2($\ln n!$ の近似式)を参照)。
Pythonによる実装例
スターリングの公式を用いた近似値の計算は、Pythonで簡単に実装できます。
ここでは、スターリングの公式による $2$ つの近似式について、その精度を確かめてみます。
例 1($n!$ の近似式)
スターリングの公式( (1.1.15)式)による $n!$ の近似値と真値を比較し、相対誤差を計算します。
$n!$ の近似値と真値を比較するコード
# 必要なライブラリをインポート
import math
# スターリングの公式による近似値を返す関数を定義
def stirling_approx(n):
return math.sqrt(2 * math.pi) * n **(n + 1/2) * (math.e) ** (-n)
# 比較する値のデータセットを設定
values = [1, 5, 10, 20, 50, 100]
# 比較結果の出力(表形式)
print(f"{'n':>5} | {'n! (exact)':>20} | {'Stirling approx':>20} | {'Relative error':>15}")
print("-" * 70)
for n in values:
exact = math.factorial(n)
approx = stirling_approx(n)
rel_error = abs((exact - approx) / exact)
print(f"{n:5d} | {exact:20.5e} | {approx:20.5e} | {rel_error:15.5e}")コードの解説
- $n$ の階乗は、
math.factorial(n)により計算できます。mathはPythonの標準ライブラリです。 stirling_approx(n)はスターリングの公式( (1.1.15)式)をそのまま実装したものです。- 相対誤差は、次の式により計算します。$$ \footnotesize{\text{相対誤差}} = \Big\lvert \, \frac{\, \footnotesize{\text{真値}} - \footnotesize{\text{近似値}} \vphantom{\big(\big)} \,}{\footnotesize{\text{真値}} \vphantom{\big(\big)}} \, \Big\rvert \\ $$
実行結果(比較表)
n | n! (exact) | Stirling approx | Relative error
----------------------------------------------------------------------
1 | 1.00000e+00 | 9.22137e-01 | 7.78630e-02
5 | 1.20000e+02 | 1.18019e+02 | 1.65069e-02
10 | 3.62880e+06 | 3.59870e+06 | 8.29596e-03
20 | 2.43290e+18 | 2.42279e+18 | 4.15765e-03
50 | 3.04141e+64 | 3.03634e+64 | 1.66526e-03
100 | 9.33262e+157 | 9.32485e+157 | 8.32983e-04結果の考察
- $n=1$ のときは誤差が大きいですが、それでも $8$ %程度です。
- $n$ が大きくなるにつれて精度が上がっていき、$n=100$ で誤差は $0.1$ %未満になります。
- これらのことから、$n$ が十分大きい場合、スターリングの公式( (1.1.15)式)が $n!$ の近似式として有効であることがわかります。
例 2($\ln n!$ の近似式)
対数形式のスターリングの公式( (1.1.18)式)による $\ln n!$ の近似値と真値を比較し、相対誤差を計算します。
$\ln n!$ の近似値と真値を比較するコード
# 必要なライブラリをインポート
import math
# スターリングの公式(対数形式)による近似値を返す関数を定義
def stirling_log_approx(n):
return n * math.log(n) - n
# 比較する値のデータセットを設定
values = [2, 5, 10, 20, 50, 100]
# 比較結果の出力(表形式)
print(f"{'n':>5} | {'ln(n!) exact':>20} | {'Stirling log approx':>20} | {'Relative error':>15}")
print("-" * 70)
for n in values:
exact_log = math.lgamma(n+1) # ガンマ関数を利用して ln(n!) を計算
approx_log = stirling_log_approx(n)
rel_error = abs((exact_log - approx_log) / exact_log)
print(f"{n:5d} | {exact_log:20.5f} | {approx_log:20.5f} | {rel_error:15.5e}")コードの解説
$n!$ の自然対数の値は、ガンマ関数の自然対数を返す
math.lgamma関数を利用して実装します。 ガンマ関数の基本的性質より、$n! = \varGamma \, (n+1)$ であることに注意します。stirling_log_approx(n)はスターリングの公式( (1.1.18)式)をそのまま実装したものです。相対誤差は、次の式により計算します。
$$ \footnotesize{\text{相対誤差}} = \Big\lvert \, \frac{\, \footnotesize{\text{真値}} - \footnotesize{\text{近似値}} \vphantom{\big(\big)} \,}{\footnotesize{\text{真値}} \vphantom{\big(\big)}} \, \Big\rvert \\ $$$n=1$ のとき、真値が $0$ となるため、相対誤差が計算できません。したがって、値の比較は $n=2$ からはじめます。
実行結果(比較表)
n | ln(n!) exact | Stirling log approx | Relative error
----------------------------------------------------------------------
2 | 0.69315 | -0.61371 | 1.88539e+00
5 | 4.78749 | 3.04719 | 3.63510e-01
10 | 15.10441 | 13.02585 | 1.37613e-01
20 | 42.33562 | 39.91465 | 5.71852e-02
50 | 148.47777 | 145.60115 | 1.93741e-02
100 | 363.73938 | 360.51702 | 8.85897e-03結果の考察
- $n=10$ でも $10$ %以上の誤差があります。
- $n$ が大きくなるにつれて精度が上がっていき、$n=100$ で誤差は $1$ %未満になります。
- 対数形式のスターリングの公式( (1.1.18)式)は、計算しやすい分、通常の公式( (1.1.15)式)と比べて相対誤差が大きくなります。
- しかしながら、統計力学や計算機科学などではもっと大きな $n$ を扱うことが多く、対数形式のスターリングの公式( (1.1.18)式)で事足りる場合が多いです。
以上から、スターリングの公式は、十分大きな自然数 $n$ の階乗(または、階乗の自然対数)の近似式として強力なツールであることがわかります。
実際の計算においては、理論的な背景を踏まえつつ、誤差を考慮した上で公式を利用することが重要です。
参考文献
[1] 舟木直久. 確率論. 朝倉書店. 2004.
[2] 縄田和満. 確率・統計 $\text{I}$. 丸善出版. 2013.
[3] 小針晛宏. 確率・統計入門. 岩波書店. 1973.
[4] 真貝寿明. 徹底攻略 確率統計. 共立出版. 2012.
[5] 東京大学教養学部統計学教室 編. 統計学入門. 東京大学出版会. 1991.
[6] W. Feller. An Introduction to Probability Theory and Its Applications. John Wiley & Sons, Inc.. 1968.
[7] Robert B. Ash. Basic Probability Theory. Dover Publications, Inc.. 2008.
[8] G. Andrews. Special Functions. Cambridge University Press. 1999.
[9] 杉浦光夫. 解析入門 $\text{I}$. 東京大学出版会. 1980.
[10] 吉田伸生. [新装版] ルベーグ積分入門. 日本評論社. 2021.