通过MCP连接 →

输入计算

数学公式

广告

结果

lnGamma(a)
1.20097360234708
伽马函数的自然对数
lnGamma(a) 1.20097360234708
Log10 Gamma(a) 0.52157620841081
算法 Lanczos 逼近算法(g=7,n=9)

什么是对数伽马函数?

对数伽马函数记作 \(\ln\Gamma(a)\) 或 \(\ln(\Gamma(a))\),也就是伽马函数 \(\Gamma(a)\) 的自然对数。伽马函数把阶乘从整数推广到了实数和复数:当 \(n\) 为正整数时,\(\Gamma(n) = (n-1)!\)。由于 \(\Gamma(a)\) 增长得极其迅猛,科学家和统计学家几乎总是改用它的对数形式来计算,以避免数值溢出。lnGamma 在概率论(贝塔分布、伽马分布、卡方检验)、组合数学以及数值分析中随处可见。

坐标网格上正实数自变量的对数伽马函数曲线
lnGamma(a) 曲线在 a ≈ 1.46 附近降至最小值,并向两侧上升。

如何使用本计算器

输入参数 \(a\)(任意实数),然后点击计算即可。工具会给出自然对数形式的 \(\ln\Gamma(a)\),同时附上以 10 为底的版本(Log10 Gamma)。当 \(a\) 大于 0 时,结果为实数。在 \(a = 0, -1, -2, -3\dots\) 这些点上,伽马函数存在极点,因此 lnGamma 在此处无定义,计算器会作出相应提示。对于非整数的负数 \(a\),Gamma 可能取负值,此时计算器会通过反射公式给出实数主值。

公式详解

本计算器采用 Lanczos 逼近算法(\(g = 7\),九个系数),这是一种速度快、精度高的闭式方法。令 \(x = a - 1\),\(t = x + 7.5\),先计算 Lanczos 系数的加权和 \(A\),再代入公式

$$\ln\Gamma(a) = \tfrac{1}{2}\ln(2\pi) + \left(x+\tfrac{1}{2}\right)\ln(t) - t + \ln A$$

当 \(a\) 小于或等于 0.5 时,则借助反射公式

$$\Gamma(a)\,\Gamma(1-a) = \frac{\pi}{\sin(\pi 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(a)\) 也会让标准浮点数发生溢出(\(\Gamma(171)\) 就已经超出了双精度浮点的范围),而 lnGamma 的数值则始终在可控范围内,因此对数形式才是实用之选。

lnGamma(1) 和 lnGamma(2) 等于多少? 两者都等于 0,因为 \(\Gamma(1) = \Gamma(2) = 1\),而 \(\ln(1) = 0\)。该函数在 \(a \approx 1.4616\) 附近取得最小值。

计算结果精确吗? 对于常见的参数,Lanczos 逼近的精度约为 15 位有效数字,与双精度浮点的精度相当。

最后更新: