对应《具体数学:计算机科学基础(第 2 版)》第 5 章 §5.5,书内第 170---180 页。本文沿用专栏三级编号。
二项式系数可以反转、吸收、拆开,再组合成完全不同的样子。有没有一种办法,能看出两个外形不同的和式其实属于同一类?超几何表示给出的入口很直接:计算相邻两项的比值。
1. 先分清上升阶乘与下降阶乘
本文用标准的 Pochhammer 记号表示上升阶乘:
( a ) k = a ( a + 1 ) ⋯ ( a + k − 1 ) , ( a ) 0 = 1. (a)_k=a(a+1)\cdots(a+k-1),\qquad(a)_0=1. (a)k=a(a+1)⋯(a+k−1),(a)0=1.
它与二项式系数定义中的下降阶乘方向相反。例如 ( 3 ) 4 = 3 ⋅ 4 ⋅ 5 ⋅ 6 (3)_4=3\cdot4\cdot5\cdot6 (3)4=3⋅4⋅5⋅6,而 3 4 ‾ = 3 ⋅ 2 ⋅ 1 ⋅ 0 = 0 3^{\underline4}=3\cdot2\cdot1\cdot0=0 34=3⋅2⋅1⋅0=0。
两种记号通过
( r k ) = ( − 1 ) k ( − r ) k k ! \binom rk=\frac{(-1)^k(-r)_k}{k!} (kr)=k!(−1)k(−r)k
联系起来。原书用带上横线的幂表示上升阶乘;这里采用常见的 ( a ) k (a)_k (a)k 写法,含义一致。
广义超几何级数定义为
p F q ( a 1 , ... , a p b 1 , ... , b q ; z ) = ∑ k = 0 ∞ ( a 1 ) k ⋯ ( a p ) k ( b 1 ) k ⋯ ( b q ) k z k k ! . \boxed{ {}pF_q\!\left(\begin{matrix}a_1,\ldots,a_p\\b_1,\ldots,b_q\end{matrix};z\right) =\sum{k=0}^{\infty} \frac{(a_1)_k\cdots(a_p)_k}{(b_1)_k\cdots(b_q)_k} \frac{z^k}{k!}.} pFq(a1,...,apb1,...,bq;z)=k=0∑∞(b1)k⋯(bq)k(a1)k⋯(ap)kk!zk.
通常要求所有下参数 b j b_j bj 都不是非正整数,以避免分母变成零。这个定义及参数约定也可对照 NIST DLMF §16.2。
2. 相邻项之比是识别的关键
设第 k k k 项为 t k t_k tk。在相应比值有定义的位置,
t k + 1 t k = z ( k + a 1 ) ⋯ ( k + a p ) ( k + b 1 ) ⋯ ( k + b q ) ( k + 1 ) . \frac{t_{k+1}}{t_k} =z\frac{(k+a_1)\cdots(k+a_p)}{(k+b_1)\cdots(k+b_q)(k+1)}. tktk+1=z(k+b1)⋯(k+bq)(k+1)(k+a1)⋯(k+ap).
它是 k k k 的有理函数。反过来,如果一个和式的首项 t 0 ≠ 0 t_0\ne0 t0=0,相邻项之比是有理函数,就可以分解分子与分母,从线性因子中识别参数,并把 t 0 t_0 t0 提到级数外。
若分母缺少 k + 1 k+1 k+1,可以在分子、分母同时补上它;对应地,上参数中增加一个 1 1 1。如果最初几项为零,应先移到第一个非零项,不能直接除以 t 0 = 0 t_0=0 t0=0。
几个熟悉的例子是
0 F 0 ( ; ; z ) = e z , 1 F 0 ( a ; ; z ) = ( 1 − z ) − a , {}_0F_0(; ;z)=e^z, \qquad {}_1F_0(a; ;z)=(1-z)^{-a}, 0F0(;;z)=ez,1F0(a;;z)=(1−z)−a,
2 F 1 ( 1 , 1 ; 2 ; z ) = ∑ k ≥ 0 z k k + 1 = − log ( 1 − z ) z . {}2F_1(1,1;2;z)=\sum{k\ge0}\frac{z^k}{k+1} =-\frac{\log(1-z)}z. 2F1(1,1;2;z)=k≥0∑k+1zk=−zlog(1−z).
后两式作为级数在 ∣ z ∣ < 1 |z|<1 ∣z∣<1 内成立;对数式在 z = 0 z=0 z=0 处取极限 1 1 1。将已有函数放进同一套记号中,才可能统一使用变换公式。
3. 终止级数与收敛条件
如果某个上参数是 − n -n −n,其中 n n n 是非负整数,那么
( − n ) k = 0 ( k > n ) . (-n)_k=0\qquad(k>n). (−n)k=0(k>n).
在下参数没有造成零分母的正常情形下,级数因此终止,成为有限和。
对于不终止、下参数合法的级数,相邻项比值给出以下基本分类:
| 参数个数关系 | 原级数的基本收敛范围 |
|---|---|
| p ≤ q p\le q p≤q | 对所有有限 z z z 绝对收敛 |
| p = q + 1 p=q+1 p=q+1 | 收敛半径为 1 1 1,边界另行判断 |
| p > q + 1 p>q+1 p>q+1 | 对非零 z z z 发散 |
在 p = q + 1 p=q+1 p=q+1、 z = 1 z=1 z=1 时,一个常用的绝对收敛条件是
ℜ ( ∑ j b j − ∑ i a i ) > 0. \Re\left(\sum_jb_j-\sum_i a_i\right)>0. ℜ(j∑bj−i∑ai)>0.
这些是原级数的结论。解析延拓可能给出收敛圆外的函数值,但那不等于原级数在那里也能直接相加。形式幂级数运算同样不能自动证明数值收敛。
4. 范德蒙德卷积的超几何形式
最常用的终止公式之一是
2 F 1 ( − n , a ; c ; 1 ) = ( c − a ) n ( c ) n , n ≥ 0. \boxed{{}_2F_1(-n,a;c;1)=\frac{(c-a)_n}{(c)_n},\qquad n\ge0.} 2F1(−n,a;c;1)=(c)n(c−a)n,n≥0.
这里先假设 c c c 不是非正整数。把左边写开,就是
S n ( a , c ) = ∑ k = 0 n ( − 1 ) k ( n k ) ( a ) k ( c ) k . S_n(a,c)=\sum_{k=0}^{n}(-1)^k\binom nk\frac{(a)_k}{(c)_k}. Sn(a,c)=k=0∑n(−1)k(kn)(c)k(a)k.
用加法公式拆分 ( n + 1 k ) \binom{n+1}k (kn+1),第二部分移位,得到
S n + 1 ( a , c ) = S n ( a , c ) − a c S n ( a + 1 , c + 1 ) . S_{n+1}(a,c)=S_n(a,c)-\frac acS_n(a+1,c+1). Sn+1(a,c)=Sn(a,c)−caSn(a+1,c+1).
初值 S 0 = 1 S_0=1 S0=1。若代入归纳假设,右边为
( c − a ) n ( c ) n − a c ( c − a ) n ( c + 1 ) n = ( c − a ) n ( c ) n ( 1 − a c + n ) = ( c − a ) n + 1 ( c ) n + 1 . \begin{aligned} \frac{(c-a)_n}{(c)_n} -\frac ac\frac{(c-a)_n}{(c+1)_n} &=\frac{(c-a)n}{(c)n}\left(1-\frac a{c+n}\right)\\ &=\frac{(c-a){n+1}}{(c){n+1}}. \end{aligned} (c)n(c−a)n−ca(c+1)n(c−a)n=(c)n(c−a)n(1−c+na)=(c)n+1(c−a)n+1.
于是公式获得证明。例如 n = 3 , a = 2 , c = 5 n=3,a=2,c=5 n=3,a=2,c=5 时,
1 − 6 5 + 3 5 − 4 35 = 2 7 = ( 3 ) 3 ( 5 ) 3 . 1-\frac65+\frac35-\frac4{35}=\frac27 =\frac{(3)_3}{(5)_3}. 1−56+53−354=72=(5)3(3)3.
同一个恒等式,既可以看作二项式卷积,也可以看作超几何函数在 z = 1 z=1 z=1 处的值。转换到标准参数形式后,许多看似不同的练习会落到同一条公式上。
5. Gamma 函数为什么出现?
正整数阶乘可由 Gamma 函数延伸:
Γ ( n + 1 ) = n ! , Γ ( z + 1 ) = z Γ ( z ) . \Gamma(n+1)=n!,\qquad \Gamma(z+1)=z\Gamma(z). Γ(n+1)=n!,Γ(z+1)=zΓ(z).
在适当的定义域内, ( a ) k = Γ ( a + k ) / Γ ( a ) (a)_k=\Gamma(a+k)/\Gamma(a) (a)k=Γ(a+k)/Γ(a)。但上升阶乘对整数 k ≥ 0 k\ge0 k≥0 本来就是多项式;当 a a a 为非正整数时,应优先使用这个多项式定义,不能把有极点的 Gamma 值当普通数相除。
高斯求和公式把上一节的终止结果推广到一般参数:
2 F 1 ( a , b ; c ; 1 ) = Γ ( c ) Γ ( c − a − b ) Γ ( c − a ) Γ ( c − b ) , ℜ ( c − a − b ) > 0 , {}_2F_1(a,b;c;1) =\frac{\Gamma(c)\Gamma(c-a-b)}{\Gamma(c-a)\Gamma(c-b)}, \qquad\Re(c-a-b)>0, 2F1(a,b;c;1)=Γ(c−a)Γ(c−b)Γ(c)Γ(c−a−b),ℜ(c−a−b)>0,
并需满足通常的参数定义条件。该式及其适用条件见 NIST DLMF 15.4.20。遇到极点与退化参数时,应回到有限乘积或明确的极限过程。
6. 上下参数相同,也不总能随手约掉
在普通参数处, ( a ) k ( a ) k = 1 \frac{(a)_k}{(a)_k}=1 (a)k(a)k=1 很自然。但若 a = 0 a=0 a=0,从 k = 1 k=1 k=1 起就变成 0 / 0 0/0 0/0,原定义已不适用。
看同一个退化点的两条接近路径。固定 ∣ z ∣ < 1 |z|<1 ∣z∣<1,对合适的非零 ε \varepsilon ε,
2 F 1 ( 0 , 1 ; ε ; z ) = 1 , {}_2F_1(0,1;\varepsilon;z)=1, 2F1(0,1;ε;z)=1,
而
2 F 1 ( ε , 1 ; ε ; z ) = 1 1 − z . {}_2F_1(\varepsilon,1;\varepsilon;z)=\frac1{1-z}. 2F1(ε,1;ε;z)=1−z1.
两条路径都趋向参数点 ( a , b , c ) = ( 0 , 1 , 0 ) (a,b,c)=(0,1,0) (a,b,c)=(0,1,0),结果却不同。例如 z = 1 / 2 z=1/2 z=1/2 时分别是 1 1 1 和 2 2 2。所以,"把参数代进去再约掉"不能替代极限的定义。
当原问题是一个指定的有限和时,应保留它的终止范围,并逐项检查分母。若需要延拓,则还必须说明哪些参数固定、哪些参数趋近。
7. Python:用项比递推精确计算有限和
python
from fractions import Fraction
from math import comb
def rising(a, n):
value = Fraction(1)
for k in range(n):
value *= a + k
return value
def terminating_2f1(n, a, c, z):
# 第一上参数固定为 -n;只计算 k=0,...,n。
if n < 0:
raise ValueError("n 必须为非负整数")
a, c, z = map(Fraction, (a, c, z))
term = total = Fraction(1)
for k in range(n):
if c + k == 0:
raise ZeroDivisionError("终止范围内出现零分母")
term *= Fraction((-n+k) * (a+k), (c+k) * (k+1)) * z
total += term
return total
for n in range(21):
for a in [Fraction(-3, 2), Fraction(2), Fraction(7, 3)]:
for c in [Fraction(1, 2), Fraction(5), Fraction(11, 3)]:
value = terminating_2f1(n, a, c, 1)
direct = sum((-1)**k * comb(n, k) * rising(a, k) / rising(c, k)
for k in range(n+1))
assert value == direct == rising(c-a, n) / rising(c, n)
assert terminating_2f1(3, 2, 5, 1) == Fraction(2, 7)
print("终止超几何和的项比、直接求和与封闭形式一致")
这里实现的是明确截断的有限和计算器,没有实现一般超几何函数的解析延拓。程序核验也没有替代关于收敛性的论证。
8. 自测
怎样判断一个和式值得尝试超几何表示? 先计算相邻项之比,看它是否为指标的有理函数。
上参数 − n -n −n 起什么作用? 在分母合法的前提下,使级数在第 n n n 项后终止。
两个有极点的 Gamma 因子能直接消去吗? 不能,必须保留原定义或指定极限路径。
参考:Ronald L. Graham、Donald E. Knuth、Oren Patashnik 著,张明尧、张凡译,《具体数学:计算机科学基础(第 2 版)》,人民邮电出版社,§5.5。本文重新组织核心定义、推导与边界说明,并补充精确程序核验;不是原文摘录。