透過 MCP 連接 →

輸入計算

數學公式

廣告

結果

lnGamma(a)
1.20097360234708
伽瑪函數的自然對數
lnGamma(a) 1.20097360234708
Log10 Gamma(a) 0.52157620841081
計算方法 Lanczos 近似法(g=7,n=9)

什麼是對數伽瑪函數?

對數伽瑪函數通常寫成 \(\ln\Gamma(\text{a})\) 或 \(\ln(\Gamma(\text{a}))\),指的就是伽瑪函數 \(\Gamma(\text{a})\) 取自然對數後的結果。伽瑪函數把階乘的概念延伸到實數與複數上:當 \(n\) 為正整數時,\(\Gamma(n) = (n-1)!\)。由於 \(\Gamma(\text{a})\) 的數值增長得非常快,科學家與統計學家幾乎都直接使用它的對數形式,以避免數值溢位(overflow)。lnGamma 在機率論(beta 分布、gamma 分布、卡方檢定)、組合數學以及數值分析中隨處可見。

座標網格上正實數引數的對數伽瑪函數曲線
lnGamma(a) 曲線在 \(a \approx 1.46\) 附近降至最小值,並向兩側上升。

計算器使用說明

輸入引數 \(a\)(任意實數)後按下計算,工具會以自然對數形式回傳 \(\ln\Gamma(\text{a})\),並一併給出以 10 為底的版本(Log10 Gamma)。當 \(a\) 大於 0 時,結果為實數。在 \(a = 0, -1, -2, -3, \ldots\) 這些點上,伽瑪函數存在極點(pole),因此 lnGamma 沒有定義,計算器會明確標示。對於非整數的負數 \(a\),Gamma 可能為負值;此時計算器會透過反射公式回傳實數主值。

公式說明

本計算器採用 Lanczos 近似法(\(g = 7\),共九個係數),這是一種快速且高度精準的封閉形式演算法。令 \(x = a - 1\)、\(t = x + 7.5\),先計算 Lanczos 係數的加權總和 \(A\),再代入公式 $$\ln\Gamma\!\left(\text{a}\right) = \tfrac{1}{2}\ln(2\pi) + \left(x+\tfrac{1}{2}\right)\ln\!\left(t\right) - t + \ln A.$$當 \(a\) 小於或等於 0.5 時,會利用反射公式 $$\Gamma(\text{a})\,\Gamma(1-\text{a}) = \frac{\pi}{\sin(\pi\,\text{a})},$$把問題轉換到 Lanczos 級數收斂良好的區間再求值。

將 Lanczos 對數伽瑪公式的每個部分對應到帶標籤方塊的示意圖
公式各項如何組合:偏移 \(x=a-1\)、數值 \(t=x+7.5\) 以及 Lanczos 級數 \(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.$$

常見問題

為什麼要用伽瑪的對數,而不是直接用伽瑪本身?當 \(a\) 稍微大一點時,\(\Gamma(\text{a})\) 就會超出標準浮點數的範圍(\(\Gamma(171)\) 已經超過雙精度浮點數所能表示的上限),而 lnGamma 的數值仍在可控範圍內,因此對數形式才是實務上的選擇。

lnGamma(1) 和 lnGamma(2) 是多少?兩者都是 0,因為 \(\Gamma(1) = \Gamma(2) = 1\),而 \(\ln(1) = 0\)。此函數在 \(a \approx 1.4616\) 附近有一個最小值。

計算結果精確嗎?對於一般的引數,Lanczos 近似法可達約 15 位有效數字的精度,與雙精度浮點數的能力相當。

最後更新: