SciPy 中 Gamma 及其相关函数

本文解释了 SciPy 中 gamma 函数及其相关函数,这些函数有:

  • gamma
  • gammaln
  • gammainc
  • gamaincinv
  • gammaincc
  • gammainccinv
  • beta
  • betaln
  • betainc
  • betaincinv
  • psi
  • polygamma

SciPy 中的函数名很容易和数学函数相对应。但是,有以下几点要注意:

  1. ln 结尾的函数的确是取自然对数,但它们要先取绝对值。
  2. 包含 inc 的函数计算的是 正则化 不完全函数(regularized incomplete functions),而不是简单的不完全函数。

这些要点将在下面阐明。

Gamma 和 beta 函数

在 SciPy 中 gamma 函数 $\Gamma (z)$ 和 beta 函数 $B(x, y)$ 毫不意外地被称为 gammabetagamma(z) 计算:

$$\Gamma (z) = \int_0^{\infty} t^{z-1}e^{-t} dt$$

beta(x, y) 计算:

$$B(x, y ) = \int_0^1 t^{x-1}(1-t)^{y-1}dt=\frac{\Gamma(x) \Gamma(y)}{\Gamma(x+y)}$$

对数

通常 gamma 和 beta 函数在实践中不如其对数形式有用(请参阅这里的解释)。这些对数形式在 SciPy 中被称为 gammalnbetaln。 注意 gammaln实际上返回的是 gamma 函数 绝对值 的自然对数,即 gammaln(z) 计算 $log|\Gamma(z)|$。而 betaln(x, y) 计算 $log|B(x, y)|$

Psi 和 polygamma 函数

$\psi(z)$ 表示 $log(\Gamma(z))$ 的导数,在 SciPy 中被称为 psi 函数。$\psi(z)$ 的第 n 个导数在 SciPy 中用 psi(n, z) 表示。

不完全函数与互补函数

gamma 和 beta 函数都有“不完全”版。但是,SciPy 的不完全伽马函数 gammainc 对应 正则化 伽玛函数。类似地,SciPy 的不完全 beta 函数 betainc 对应正则化 beta 函数。

(下)不完全 gamma 函数由下式定义

$$\gamma(a, z) = \int_0^z t^{a-1}e^{-t} dt$$

上不完全 gamma 函数由下式定义

$$\Gamma(a, z) = \int_z^{\infty} t^{a-1}e^{-t} dt$$

之所以被称为“不完全”是因为它们在 gamma 函数定义域的一部分进行积分。不完全 beta 函数也遵循同样的模式。

正则化的不完全 gamma 函数定义如下:

$$P(a, z) = \frac{\gamma(a, z)}{\Gamma(a)}$$

以及

$$Q(a, z) = \frac{\Gamma(a, z)}{\Gamma(a)}$$

SciPy 的函数 gammainc(a, z) 计算 P(a, z),函数 gammaincc 计算 Q(a, z)。 注意 gammaincc 中额外的 c 代表“互补”。由于 Q(a, z) = 1 - P(a, z),所以似乎不需要同时提供 P(a, z) 及其互补函数 Q(a, z)。但是,为了数值的精度,我们需要互补函数。请参阅这里的解释。这里同样适用于不完全伽马函数。

不完全 beta 函数定义为

$$B_x(a, b) = \int_0^x t^{a-1}(1-t)^{b-1} dt$$

正则化不完全 beta 函数定义为

$$I_x(a, b) = \frac{B_x(a, b)}{B(a, b)}$$

SciPy 函数 betainc(a, b, c) 计算 $I_x(a, b)$

反函数

inv 结尾的 SciPy 函数计算相应函数的反函数。gammaincinv(a, y)返回使得 gammainc(a, x) = yx。同样的,gammainccinvgammaincc 的反函数。 最后,betaincinv(a, b, y) 返回使得 betainc(a, b, x) = yx

在 gamma 和 beta 函数的 SciPy 实现中存在不对称:没有 betainccbetainccinv 函数。由于 beta 函数的对称性,这些函数是不必要的。可以将 betaincc(a, b, x) 定义为 betainc(b, a, 1-x),将 betainccinv(a, b, x) 定义为 betaincinv(b, a, 1-x)

本文翻译自:Gamma and related functions in SciPy