scipy.special.loggamma#

scipy.special.loggamma(z, out=None) = <ufunc 'loggamma'>#

伽马函数的对数主分支。

定义为 \(\log(\Gamma(x))\),适用于 \(x > 0\),并通过解析延拓扩展到复平面。该函数在负实轴上有一个单支切口。

0.18.0 版本新增。

参数:
zarray_like

计算 loggamma 的复平面上的值

outndarray, optional

用于存储计算出的 loggamma 值的输出数组

返回:
loggamma标量或 ndarray

在 z 处的 loggamma 值。

另请参阅

gammaln

伽马函数绝对值的对数

gammasgn

伽马函数的符号

附注

通常情况下,\(\log\Gamma(z) = \log(\Gamma(z))\) 不成立,尽管函数的实部是相等的。不将 loggamma 定义为 \(\log(\Gamma(z))\) 的好处在于,后者具有复杂的支切口结构,而 loggamma 仅在负实轴上存在解析延拓。

以下恒等式成立:

\[\begin{split}\exp(\log\Gamma(z)) &= \Gamma(z) \\ \log\Gamma(z + 1) &= \log(z) + \log\Gamma(z)\end{split}\]

这使得 loggamma 在复对数空间中工作非常有用。

在实数线上,loggammagammaln 通过 exp(loggamma(x + 0j)) = gammasgn(x)*exp(gammaln(x)) 关联,误差可忽略不计。

这里的实现基于 [hare1997]

数组 API 标准支持

loggamma 对 Python 数组 API 标准兼容的后端具有实验性支持,除了 NumPy 之外。请考虑通过设置环境变量 SCIPY_ARRAY_API=1 并提供 CuPy、PyTorch、JAX 或 Dask 数组作为数组参数来测试这些功能。支持以下后端和设备(或其他功能)的组合。

CPU

GPU

NumPy

不适用

CuPy

不适用

PyTorch

JAX

⚠️ 无 JIT

Dask

不适用

有关更多信息,请参阅 对数组 API 标准的支持

参考文献

[hare1997]

D.E.G. Hare, Computing the Principal Branch of log-Gamma, Journal of Algorithms, 第 25 卷,第 2 期,1997 年 11 月,第 221-236 页。

示例

>>> import numpy as np
>>> from scipy.special import loggamma, gamma
>>> z = 1.5 + 2j
>>> loggamma(z)
np.complex128(-1.4991963725850939+0.7332806816909994j)

验证 \(\exp(\log \Gamma(z)) = \Gamma(z)\)

>>> np.exp(loggamma(z))
np.complex128(0.165915108938991+0.14946347326641998j)
>>> gamma(z)
np.complex128(0.165915108938991+0.14946347326641998j)

验证递推关系 \(\log \Gamma(z+1) = \log(z) + \log \Gamma(z)\)

>>> loggamma(z + 1)
np.complex128(-0.5829056407109388+1.6605758996926108j)
>>> np.log(z) + loggamma(z)
np.complex128(-0.5829056407109388+1.6605758996926117j)