scipy.special.gamma#

scipy.special.gamma(z, выход=None) = 'gamma'>#

гамма-функция.

Гамма-функция определяется как

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

для \(\Re(z) > 0\) и расширяется на остальную часть комплексной плоскости аналитическим продолжением. См. [dlmf] для получения дополнительной информации.

Параметры:
zarray_like

Вещественный или комплексный аргумент

выходndarray, необязательно

Необязательный выходной массив для значений функции

Возвращает:
скаляр или ndarray

Значения гамма-функции

Примечания

Гамма-функция часто упоминается как обобщённый факториал, поскольку \(\Gamma(n + 1) = n!\) для натуральных чисел \(n\). В более общем случае удовлетворяет рекуррентному соотношению \(\Gamma(z + 1) = z \cdot \Gamma(z)\) для комплексных \(z\), что в сочетании с тем фактом, что \(\Gamma(1) = 1\), подразумевает вышеуказанное тождество для \(z = n\).

Гамма-функция имеет полюса в неотрицательных целых числах, и знак бесконечности при приближении z к каждому полюсу зависит от направления, с которого приближаются к полюсу. По этой причине логично, чтобы gamma(z) возвращала NaN для отрицательных целых чисел, и возвращала -inf при x = -0.0 и +inf при x = 0.0, используя знак нуля для обозначения направления приближения к началу координат. Это, например, рекомендуется для гамма-функции в приложении F, пункт 9.5.4 стандарта Iso C 99. [isoc99].

До версии SciPy 1.15, scipy.special.gamma(z) возвращён +inf на каждом полюсе. Это было исправлено в версии 1.15, но со следующим последствием. Выражения, где гамма появляется в знаменателе, такие как

gamma(u) * gamma(v) / (gamma(w) * gamma(x))

больше не вычисляется в 0, если числитель определен корректно, но есть полюс в знаменателе. Вместо этого такие выражения вычисляются как NaN. Мы рекомендуем использовать функцию rgamma для обратной гамма-функции в таких случаях. Вышеприведенное выражение можно, например, записать как

gamma(u) * gamma(v) * (rgamma(w) * rgamma(x))

Ссылки

Примеры

>>> import numpy as np
>>> from scipy.special import gamma, factorial
>>> gamma([0, 0.5, 1, 5])
array([         inf,   1.77245385,   1.        ,  24.        ])
>>> z = 2.5 + 1j
>>> gamma(z)
(0.77476210455108352+0.70763120437959293j)
>>> gamma(z+1), z*gamma(z)  # Recurrence property
((1.2292740569981171+2.5438401155000685j),
 (1.2292740569981158+2.5438401155000658j))
>>> gamma(0.5)**2  # gamma(0.5) = sqrt(pi)
3.1415926535897927

Построить график gamma(x) для действительного x

>>> x = np.linspace(-3.5, 5.5, 2251)
>>> y = gamma(x)
>>> import matplotlib.pyplot as plt
>>> plt.plot(x, y, 'b', alpha=0.6, label='gamma(x)')
>>> k = np.arange(1, 7)
>>> plt.plot(k, factorial(k-1), 'k*', alpha=0.6,
...          label='(x-1)!, x = 1, 2, ...')
>>> plt.xlim(-3.5, 5.5)
>>> plt.ylim(-10, 25)
>>> plt.grid()
>>> plt.xlabel('x')
>>> plt.legend(loc='lower right')
>>> plt.show()
../../_images/scipy-special-gamma-1.png