対数ガンマ関数とは
対数ガンマ関数は \(\ln\Gamma(a)\) または \(\ln(\Gamma(a))\) と表記され、ガンマ関数 \(\Gamma(a)\) の自然対数を指します。ガンマ関数は階乗を実数や複素数にまで拡張したもので、正の整数 \(n\) に対しては \(\Gamma(n) = (n-1)!\) が成り立ちます。\(\Gamma(a)\) は急激に増大するため、数値計算におけるオーバーフローを避ける目的で、科学や統計の分野ではほとんどの場合その対数が用いられます。\(\ln\Gamma\) は確率論(ベータ分布・ガンマ分布、カイ二乗検定)、組合せ論、数値解析など幅広い場面で登場します。
このツールの使い方
引数 \(a\)(任意の実数)を入力して計算ボタンを押すだけです。結果は自然対数形式の \(\ln\Gamma(a)\) に加え、常用対数(底10)による \(\log_{10}\Gamma(a)\) も表示されます。\(a > 0\) のとき結果は実数になります。\(a = 0, -1, -2, -3, \ldots\) ではガンマ関数が極(ポール)を持つため \(\ln\Gamma\) は定義されず、その旨が表示されます。整数でない負の \(a\) については \(\Gamma\) が負になることがあり、その場合は反射公式を用いて実数の主値を返します。
計算式の解説
このツールでは、高速かつ高精度な閉形式手法であるランチョス近似(\(g = 7\)、係数9個)を採用しています。\(x = a - 1\)、\(t = x + 7.5\) とおき、ランチョス係数の重み付き和 \(A\) を求めたうえで、 $$\ln\Gamma(a) = 0.5\,\ln(2\pi) + \left(x + 0.5\right)\ln(t) - t + \ln(A)$$ を計算します。\(a \le 0.5\) の場合は、反射公式 $$\Gamma(a)\,\Gamma(1-a) = \frac{\pi}{\sin(\pi a)}$$ によって、ランチョス級数がよく収束する領域の値へと問題を変換します。
計算例
\(a = 3.5\) のとき: $$\Gamma(3.5) = 2.5 \times 1.5 \times 0.5 \times \sqrt{\pi} = 1.875 \times 1.7724538509 = 3.32335097045$$ したがって \(\ln\Gamma(3.5) = \ln(3.32335097045) = 1.20097360234707\) となります。検算として \(a = 5\) を考えると、\(\Gamma(5) = 4! = 24\) なので \(\ln\Gamma(5) = \ln(24) = 3.17805383034795\) です。
よくある質問
なぜガンマ関数そのものではなく、その対数を使うのですか? \(\Gamma(a)\) は \(a\) が中程度の大きさでも標準的な浮動小数点数の範囲を超えてオーバーフローします(\(\Gamma(171)\) の時点で倍精度の範囲を超えます)。一方 \(\ln\Gamma\) は扱いやすい大きさにとどまるため、対数形式が実用的な選択肢となります。
\(\ln\Gamma(1)\) と \(\ln\Gamma(2)\) はいくつですか? どちらも 0 です。\(\Gamma(1) = \Gamma(2) = 1\) であり、\(\ln(1) = 0\) となるためです。なお、この関数は \(a \approx 1.4616\) 付近で最小値をとります。
計算結果は厳密ですか? ランチョス近似は一般的な引数に対しておよそ15桁の有効数字まで正確で、これは倍精度浮動小数点数に相当する精度です。