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))Ссылки
[dlmf]NIST Digital Library of Mathematical Functions https://dlmf.nist.gov/5.2#E1
Примеры
>>> 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()