用Scipy理解Gamma函数
文章目录
- Gamma函数
- 对数Gamma函数
- 复数域的Gamma函数
Gamma函数
Γ \Gamma Γ函数是阶乘的解析延拓,在概率论中非常常见,例如Gamma分布表示某个事件在某个时刻发生第 n n n次的概率:Gamma分布详解
Γ \Gamma Γ函数显含在 Γ \Gamma Γ分布中,其表达式可以写为
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t \Gamma(z)=\int^\infty_0 t^{z-1}e{-t}\text dt Γ(z)=∫0∞tz−1e−tdt
当 z z z为正整数时,有 Γ ( z ) = ( z − 1 ) ! \Gamma(z)=(z-1)! Γ(z)=(z−1)!,其函数图像如下
绘图代码为
import numpy as np
from scipy.special import gamma, factorial
import matplotlib.pyplot as plt
x = np.linspace(-3.5, 6, 2000)
y = gamma(x)
plt.plot(x, y, 'b')
plt.ylim(-100, 150)
k = np.arange(1, 7)
plt.plot(k, factorial(k-1), 'k*')
plt.grid()
plt.xlabel('x')
plt.show()
对数Gamma函数
鉴于阶乘函数发散得十分迅速,故而scipy
提供了两种对数的Gamma
函数,分别是gammaln
和loggamma
,其中后者的自变量大于0。其图像为
import scipy.special as sc
x = np.linspace(-10, 10, 2000)
plt.plot(x, sc.gammaln(x), 'b')
plt.show()
复数域的Gamma函数
Γ \Gamma Γ函数在复数域也有定义,对于 Γ ( x + i y ) \Gamma(x+\operatorname{i}y) Γ(x+iy),其实部可写为
ℜ ( Γ ( x + i y ) ) = ∫ 1 ∞ t x − 1 e t cos ( y ln t ) d t + ∑ k = 0 ∞ ( − 1 ) k k ! [ k + x ( k + x ) 2 + y 2 ] \Re(\Gamma(x+\operatorname{i}y)) = \int^\infty_1\frac{t^{x-1}}{e^t}\cos(y\ln t)\text dt+\sum_{k=0}^\infty\frac{(-1)^k}{k!}[\frac{k+x}{(k+x)^2+y^2}] ℜ(Γ(x+iy))=∫1∞ettx−1cos(ylnt)dt+k=0∑∞k!(−1)k[(k+x)2+y2k+x]
其虚部可写为
ℑ ( Γ ( x + i y ) ) = ∫ 1 ∞ t x − 1 e t sin ( y ln t ) d t − ∑ k = 0 ∞ ( − 1 ) k k ! [ y ( k + x ) 2 + y 2 ] \Im(\Gamma(x+\operatorname{i}y)) = \int^\infty_1\frac{t^{x-1}}{e^t}\sin(y\ln t)\text dt-\sum_{k=0}^\infty\frac{(-1)^k}{k!}[\frac{y}{(k+x)^2+y^2}] ℑ(Γ(x+iy))=∫1∞ettx−1sin(ylnt)dt−k=0∑∞k!(−1)k[(k+x)2+y2y]
scipy
中的gamma函数本身就是定义在复数域的,故而可以绘制一下复数域的
Γ
\Gamma
Γ函数
xs = np.linspace(-5, 5, 2000)
ys = np.linspace(-5, 5, 200)
ys, xs = np.meshgrid(ys,xs)
zs = gamma(xs+1j*ys)
ax = plt.subplot(projection='3d')
ax.plot_surface(xs, ys, zs)
plt.show()
结果如下
沿着实轴看去,其实就是
Γ
(
x
)
\Gamma(x)
Γ(x);随着
x
x
x逐渐变大复数域上其他位置也逐渐出现了凸起。