一个挥之不去的问题
欢迎来到特殊函数的参考书架。架上的第一本就是伽马函数,它回答了一个在你真正动手之前显得近乎幼稚的问题:(1/2)! 是多少?阶乘 5! = 5 乘 4 乘 3 乘 2 乘 1 是靠反复相乘搭出来的,而反复相乘只有在整数次时才说得通。可是把点 (1, 1)、(2, 2)、(3, 6)、(4, 24)、(5, 120) 画出来,你几乎能看到一条光滑曲线想要穿过它们。伽马函数就是把这条曲线精确化的结果。
先得坦白一个微妙之处:穿过任意一组点的光滑曲线有无穷多条。把伽马函数挑出来的,不只是光滑,而是一条结构性质——它继承了阶乘自身「乘以自变量」的规则,并且(玻尔–莫勒鲁普定理)它是唯一同时还满足对数凸性的这种曲线。所以我们并不是随意选取,而是选了那条不仅在整数处、而是处处都像阶乘的曲线。
欧拉积分:正式定义
下面是真正干活的定义,出自欧拉。对任何实部为正的 x,有 Gamma(x) = 从 0 到无穷对 t^{x-1} e^{-t} dt 的积分。注意这在两个意义上都是反常积分——它一直积到无穷,而当 x 小于 1 时因子 t^{x-1} 会在 t = 0 附近发散。这两个威胁都很温顺:e^{-t} 比任何幂次增长得都快地压垮尾部,而在零点附近只要 x 的实部大于 0,那个轻微的奇性就是可积的。所以积分收敛,并为每一个这样的 x 定义了一个真正的、无穷光滑的函数。
我们把最简单的情形算出来,看看这条曲线是否真的穿过了阶乘。取 x = 1:Gamma(1) = 从 0 到无穷对 e^{-t} dt 的积分 = 1。这就是种子。要从一个整数爬到下一个整数,我们需要递推关系——而这个递推关系正好从分部积分里掉出来,你在第一卷就为普通积分见过它。
递推关系:阶乘的栖身之处
对 Gamma(x+1) = 从 0 到无穷对 t^x e^{-t} dt 的积分做分部积分,把 t^x 求导、把 e^{-t} 积分。边界项 t^x 乘 (-e^{-t}) 在两端都消失——在 t = 0 处为零,在无穷处被指数压垮——剩下的是 x 乘以 t^{x-1} e^{-t} 的积分,而那正是 Gamma(x)。结果就是整个主题的心跳:Gamma(x+1) = x Gamma(x)。
Gamma(x+1) = integral_0^inf t^x e^{-t} dt
u = t^x dv = e^{-t} dt
du = x t^{x-1} v = -e^{-t}
= [ -t^x e^{-t} ]_0^inf + x integral_0^inf t^{x-1} e^{-t} dt
= 0 + x * Gamma(x)
=> Gamma(x+1) = x Gamma(x) (the factorial step)
Seed: Gamma(1) = 1 => Gamma(2)=1, Gamma(3)=2, Gamma(4)=6, ...这个递推关系不只是计算上的便利——它是把伽马延拓到积分收敛区域之外的工具。把它反过来读成 Gamma(x) = Gamma(x+1) / x。假设你想要 Gamma(-0.5),那里积分发散。递推关系告诉你 Gamma(-0.5) = Gamma(0.5) / (-0.5),而 Gamma(0.5) 是积分能算出的值。一步一步地,这种解析延拓把伽马推进整个复平面,只在 x = 0、-1、-2、…… 处因为除以零而留下单极点。阶乘——曾经只是一串孤立的点——变成了几乎处处有定义的函数。
二分之一处的伽马:藏着一个高斯
最美的单个值是 Gamma(1/2) = 根号 pi。一个看不见任何圆的问题里,pi 从何而来?在欧拉积分中令 x = 1/2:Gamma(1/2) = 从 0 到无穷对 t^{-1/2} e^{-t} dt 的积分。代换 t = u^2,于是 dt = 2u du、t^{-1/2} = 1/u;那个 1/u 和 2u du 合并成 2 du,积分就变成 2 乘以从 0 到无穷对 e^{-u^2} du 的积分。那正是乔装打扮的著名高斯积分。
而从 0 到无穷对 e^{-u^2} du 的积分 = sqrt(pi)/2——这个结果通常用「把积分平方再换极坐标」的技巧来证明。乘上前面的那个 2,Gamma(1/2) = 根号 pi 就落进了你手里。这值得停一下:钟形曲线 e^{-u^2} 没有初等的闭形式原函数——它是教科书级的非初等积分——可是在整条半直线上它却累加成干净的根号 pi。「非初等」意思是「没有用幂、指数、对数、三角写出的公式」,绝不是「不可计算」。一旦钉住了二分之一,递推关系就能触及每一个半整数:Gamma(3/2) = (1/2) Gamma(1/2) = sqrt(pi)/2,Gamma(5/2) = (3/2)(1/2) sqrt(pi),依此类推。
斯特林:阶乘到底长得有多快
阶乘爆炸式增长:10! 已经超过三百万,70! 就让许多计算器溢出。对很大的自变量,我们很少想要精确值——我们想知道它的量级以及如何比较。这正是斯特林近似所给的:n! 约等于 根号(2 pi n) 乘 (n/e)^n,或写成对数形式 ln(n!) 约等于 n ln n - n。直观上,ln(n!) = 从 1 到 n 的 ln k 之和,其行为像从 1 到 n 对 ln x dx 的积分 = n ln n - n + 1,而斯特林把剩下的修正项精确化了。
因为伽马就是光滑化的阶乘,斯特林其实是关于大 x 时 Gamma(x) 的陈述,并且延伸到非整数。完整版本是一个渐近级数——这里藏着一个美丽而诚实的微妙之处。如果你把它所有项都加起来,这个级数其实是发散的,可是只截取前几项却惊人地精确。原因在于:停下之后的误差大致是第一个被丢掉项的大小,它一开始飞快地变小,最终才又增大。诀窍是在最小项附近停手。所以一个级数可以发散,却仍是你所拥有的最有用工具之一。
- 想快速得到一个大阶乘:把 n! 写成 Gamma(n+1),再把 n 代入斯特林。
- 首项估计:n! 约为 sqrt(2 pi n) 乘 (n/e)^n——到 n = 10 时已经精确到约 1%。
- 需要更多位数:加上下一项,乘以 (1 + 1/(12 n)),但别一直加下去——这个级数会反咬你一口。
- 若是比较增长速度而非精确值:用对数形式 ln(n!) 约为 n ln n - n,它是组合数学和统计物理的主力。
为什么它是架上的第一本书
伽马是最无处不在的特殊函数,恰恰因为许多其它函数都由它搭成。贝塔函数 B(p, q) 等于 Gamma(p) Gamma(q) / Gamma(p+q),把有限区间上棘手的积分变成一个伽马之比。冠以伽马之名的概率分布用它作归一化常数。而当你沿这书架走得更远——到贝塞尔函数和超几何函数——它们的级数系数里也都缠着伽马的值。把这一个函数学透,特殊函数世界的其余部分就不再那么陌生了。
退一步,看看我们这一步动作的形状。我们把一个只定义在离散集合上的运算(1 乘 2 乘 …… 乘 n),换成了一个连续的、复解析的函数,它与之相符并且处处遵守同一条规则。这正是高等微积分反复出现的习惯:要求一个熟悉的对象保持它的定义性质,从而延拓它,然后发现延拓后的版本比原来更丰富。阶乘只懂整数;伽马懂得所有的数。