算法思想,将求和项看作 n 和 k 的一个函数 t(n,k)
基本思想
t(n,k)=(kn)zk,考虑一个更加一般的项
t^(n,k)=β0(n)t(n,k)+β1(n)t(n+1,k)(1)
首先将 n 看作变量
t(n,k)t(n+1,k)=n+1−kn+1,代入 (1) 中
t^(n,k)=p(n,k)n+1−kt(n,k)(1.0),其中
p(n,k)=(n+1−k)β0(n)+(n+1)β1(n)(1.1)
下面对 t^(n,k) 应用 Gosper 算法,对 k 应用算法
t^(n,k)t^(n,k+1)=p^(n,k)p^(n,k+1)r(n,k+1)q(n,k)(2)
一般来说,在 Gosper 中我们令 p^(n,k)=1,但是在 Zeilberger 推广中
令 p^(n,k)=p(n,k),令 t(n,k)=p(n,k)t^(n,k), p(n,k)=p(n,k)p^(n,k)
这样,就可以得到如下表达式
t(n,k)t(n,k+1)=p(n,k)p(n,k+1)r(n,k+1)q(n,k)(3)
这样我们就可以令 p(n,k)=1
我们令 t(n,k)=t^(n,k)/p(n,k),而 t^(n,k)=p(n,k)n+1−kt(n,k),从而
t(n,k)=n+1−kt(n,k)=(n+1−k)!k!n!zk,所以
t(n,k)t(n,k+1)=k+1(n+1−k)z
根据 Gosper 算法,可以令 q(n,k)=(n+1−k)z,r(n,k)=k,并且 q/r 没有关于 k 的 ⩾1 的因子
满足算法条件,可以直接用 Gosper 算法求解
接下来关于 k 执行 Gosper 算法第二步
p^(n,k)=q(n,k)s(n,k+1)−r(n,k)s(n,k)(4)
其中 s(n,k)=αd(n)kd+αd−1(n)kd−1+⋯+α0(n) 是一个待定多项式
将例子中给出的 q,r 代入 (4) 和 (1.1)
(n+1−k)β0(n)+(n+1)β1(n)=(n+1−k)zs(n,k+1)−ks(n,k)
看作关于 k 的方程,通过考虑 Q(n,k)=q(n,k)−r(n,k),R(n,k)=q(n,k)+r(n,k) 确定次数 d
deg(p^)=deg(Q)=deg(R)=1
由此我们有 d=deg(p^)−deg(Q)=0,s(n,k)=α0(n) 与 k 无关
方程写成
(n+1−k)β0(n)+(n+1)β1(n)=(n+1−k)zα0(n)−kα0(n)
让两边关于 k 的幂相等
{(n+1)β0(n)+(n+1)β1(n)−(n+1)zα0(n)=0−β0(n)+(z+1)α0(n)=0
因此满足条件的是
β0(n)=z+1,β1(n)=−1,α0(n)=s(n,k)=1
综上所述
t^(n,k)=T(n,k+1)−T(n,k)(5)
其中根据 Gosper 算法的推广
T(n,k)=p^(n,k)r(n,k)s(n,k)t^(n,k)=r(n,k)s(n,k)t(n,k)
最后一步是因为
t^(n,k)=t(n,k)p(n,k),因为 p(n,k)=1,所以 p^(n,k)p(n,k)=p(n,k)=1
根据 (1.0),t(n,k)=p(n,k)t^(n,k)=n+1−kt(n,k)
T(n,k)=n+1−kkt(n,k)=n+1−kk(kn)zk=(k−1n)zk
根据 (1) 和 (5) 容易验证
(z+1)(kn)zk−(kn+1)zk=(kn)zk+1−(k−1n)zk
当 n 是任意整数时,仅有限多个 k 值不等于 0,这样 T(n,k+1)−T(n,k) 对所有 k 求和缩减为 0
∑t^(n,k)=0
k∑((z+1)t(n,k)−t(n+1,k))=0
这个求和就是
(z+1)Sn−Sn+1=0,从而 Sn+1=(z+1)Sn,S0=1,那么有 Sn=(z+1)n
Gosper-Zeilberger 算法
-
令 l=0,求关于 n 的 l 阶递归式
-
先将通项 t(n,k) 看作是关于 n 的,求 t(n,k)t(n+1,k)⋯,代入
t^(n,k)=β0(n)t(n,k)+⋯+βl(n)t(n+l,k),可以求出一个线性组合
一般是令 t(n,k)=A(n,k)t(n,k),A(n,k) 是通分之后的分母
从而有 t^(n,k)=p(n,k)t(n,k),其中 t(n,k) 是关于 k 的超几何项
一般来说,线性组合通分之后,分子表达式一般有形式 p(n,k)=B(n,k)=p^(n,k)
-
根据得到的 t(n,k),看作 k 的超几何项
根据 t(n,k)t(n,k+1)=p(n,k)p(n,k+1)r(n,k+1)q(n,k)
通常我们有 p(n,k)=1,从而可以求出 q(n,k),r(n,k),此时 p^(n,k)=p(n,k)p(n,k)
-
令 dQ=deg(q−r), dR=deg(q+r)
d={deg(p^)−dQdeg(p^)−dR+1dQ⩾dRdQ<dR
-
如果 d⩾0,那么用 s(n,k)=αd(n)kd+αd−1(n)kd−1+⋯+α0(n) 待定 s(n,k)
并且代入方程,(其中 p^(n,k) 在第二步中求出来了)
p^(n,k)=q(n,k)s(n,k+1)−r(n,k)s(n,k)
代入方程之后,令 k 的幂对应的系数相等可以得到 β0,β1,⋯,βl
如果这些关于 β 的解不全为 0,return true
-
否则的话,当 dQ<dR 并且 −2λ′/λ 是一个 >d 的整数时
(注意到 λ 是 q+r 中 kdR 的系数,λ′ 是 q−r 中 kdR−1 的系数)
令 d=−2λ′/λ 并且重复上一步
如果不满足这一步一开始时的条件,return false
-
如果 false,那么将 l+=1,从第一步开始再尝试
-
如果 true,那么令
T(n,k)=p(n,k)r(n,k)s(n,k)t(n,k),并且 t^(n,k)=T(n,k+1)−T(n,k)
一些例子
具体数学习题 5.94
求 ∑(ka)(n−k−a)δk 的封闭形式
第一步
不难推出
t(k)t(k+1)=(k+1)(k−n−a+1)(k−a)(k−n)
令 p(k)=1
r(k)=k(k−n−a), q(k)=(k−a)(k−n)
第二步
划归之后有 Q(k)=q(k)−r(k)=an,R(k)=q(k)+r(k)=2k2−2(a+n)k+an
deg(R)=2,deg(Q)=0
d=deg(p)−deg(R)+1=0−2+1=−1,这里需要额外检查
R(k)=2k2+⋯,由此 λ=2
Q(k)=0⋅k1+⋯,由此 λ′=0
−2λ′/λ>deg(p)−deg(R)+1,转为 Gosper 算法第二种情形
2λ′+λd=0,则 s(k) 次数 d=0
第三步
s(k)=α0 代入 p(k)=q(k)s(k+1)−r(k)s(k),从而
1=(k−a)(k−n)α0−k(k−n−a)α0=an⋅α0
s(k)=an1
第四步
T(k)=p(k)r(k)s(k)t(k)=k(k−n−a)an1(ka)(n−k−a)
T(k)=(k−1a−1)nk−n−a(n−k−a)=(k−1a−1)nk−n−a(n−k)!(−a)n−k
化简蓝色部分,(−1)⋅(n−k)!(−a)n−kna+n−k
(−1)(n−k)!(−a)(−a−1)⋯(−a−n+k+1)na+n−k
=(−1)(−1)n−k(n−k)!(a+n−k)n−kna=(−1)n−k+1(n−ka+n−k)na
=(−1)n−k+1(−1)n−k(n−k−a−1)na=(−1)(n−k−a−1)na
由此 Gosper 求出答案为
T(k)=−(k−1a−1)(n−k−a−1)na+C
当 m⩾0 是一个小于 n 的整数的时候
(n−km−a)δk⇒(1+k)m(1+k)−a 关于 k 的二项式生成函数
从而
∑(ka)(n−km−a)δk=j∑(jm)⋅(ka)(n−j−k−a)
=j∑(jm)n−j−a(k−1a−1)(n−j−k−a−1)+C
一些例子2
k∑(km−r+s)(n−kn+r−s)(m+nr+k)=(mr)(ns)
作变换 m=b+d,n=a,r=a+b+c+d,s=a+b+c,可以将原式写成更为对称的形式
k∑=(a−k)!(b−k)!(c+k)!(d+k)!k!(a+b+c+d+k)!=a!b!(a+c)!(a+d)!(b+c)!(b+d)!(a+b+c+d)!(a+b+c)!(a+b+d)!
这样可以考虑 Gosper 算法的标准流程,取 n=a
t(n,k)=(n−k)!(b−k)!(c+k)!(d+k)!k!(n+b+c+d+k)!
p(n,k)=p^(n,k)=(n+1−k)β0(n)+(n+1+b+c+d+k)β1(n)
t(n,k)=n+1−kt(n,k)=(n+1−k)!(b−k)!(c+k)!(d+k)!k!(n+1+b+c+d+k)!
q(n,k)=(n+b+c+d+k+1)(n+1−k)(b−k)
r(n,k)=(c+k)(d+k)k
注意到 deg(q−r)<deg(q+r),但是 deg(p^)=1,deg(q+r)=3
deg(p^)−deg(q+r)+1=−1,但是注意到还需要判 −2λ′/λ
q+r=2k3+⋯,从而 λ=2
q−r=0k2+⋯,从而 λ′=0
此时我们取 d=−2λ′/λ=0,即 s(n,k)=α0(n)
最后我们考虑关于 k 的方程幂次相等
(n+1−k)β0(n)+(n+b+c+d+k+1)β1(n)
=(n+b+c+d+k+1)(n+1−k)(b−k)⋅α0(n)−(c+k)(d+k)k⋅α0(n)
{(n+1)β0(n)+(n+1+b+c+d)β1(n)−(n+1)(n+b+c+d+1)bα0(n)=0−β0(n)+β1(n)−((n+1)b−(n+1+b)(n+b+c+d+1)−cd)α0(n)=0
将 β0(n)=β1(n)−⋯ 代入第一个方程即可求解
α0(n)=2n+2+b+c+d
β1(n)=−(n+1)(n+1+c)(n+1+d)
β0(n) 的推导比较复杂,先令 n+1=t
β0(n)=−t(t+c)(t+d)
−tb((t+b+c+d+t)+(t+b)(t+b+c+d)(t+b+c+d+t)+cd(t+b+c+d+t))
红色部分化简成
(t+b+c+d+t)((t+b+c)(t+b+d)−tb)
原式就化为
(t+b+c)(t+b+d)(2t+b+c+d)−tb(t+c)−tb(t+d)−tb⋅b−t(t+c)(t+d)
综上所述
β0(n)=(n+1+b+c)(n+1+b+d)(n+1+b+c+d)
我们得出递推结论
β0(n)t(n,k)+β1(n)t(n+1,k) 是可以关于 k 求和的
即 (n+1+b+c)(n+1+b+d)(n+1+b+c+d)Sn−(n+1)(n+1+c)(n+1+d)Sn+1=0
Sn−1Sn=n(n+c)(n+d)(n+b+c)(n+b+d)(n+b+c+d)
S0Sn=n!(n+c)n(n+d)n(n+b+c)n(n+b+d)n(n+b+c+d)n
S0Sn=(b+c)!(b+d)!(b+c+d)!(n+c)!(n+d)!n!(n+b+c)!(n+b+d)!(n+b+c+d)!c!d!
因为 S0=(nn+r−s)(m+nr)=a!b!c!d!(b+c+d)!
该问题证毕
一些例子3
同例2,只是这里令 n=d 入手,那么表达式变成了
t(n,k)=(n+k)!(c+k)!(a−k)!(b−k)!k!(n+a+b+c+k)!
同上分析,代换之后
[k]:β0(n)+β1(n)=(ab−(n+1)c−(a+b)(n+a+b+c+1))α0(n)
[k0]:(n+1)β0(n)+(n+a+b+c+1)β1(n)=(n+a+b+c+1)ab⋅α0(n)
(a+b+c)β1(n)
=((n+a+b+c+1)ab−(n+1)(ab−(n+1)c−(a+b)(n+a+b+c+1)))⋅α0(n)
考虑到两边关于 n 的系数
[n2]:(a+b+c)α0(n)
[n]:(a+b+c)(a+b+2)α0(n)
[n0]:(a+b+c)(ab+1+a+b)α0(n)
从而令 α0(n)=−1,那么有 β1(n)=−(n+a+1)(n+b+1)
β0(n)=(n+1+a+b+c)(n+1+a+b)
注意到表达式
t(n,k)=(n+k)!(c+k)!(a−k)!(b−k)!k!(n+a+b+c+k)!
{a−k⩾0n+k⩾0,我们有 {k⩽ak⩾−n
递推起点应该是 n=−a,k=a
S(−a)=(c+a)!(b−a)!a!(a+b+c)!
那么我们有
SnSn+1=∣β1(n)∣∣β0(n)∣=(n+1+a)(n+1+b)(n+1+a+b+c)(n+1+a+b)
根据递推式,n=d,考虑 S(−a)S(d−1),这里要往下乘 tot=a+d 项
S(−a)S(d−1)=1⋅2⋯(a+d)⋅(b−a+1)⋯(b+d)(b+c+1)(b+c+2)⋯(b+c+a+d)⋅(b+1)(b+2)⋯(a+b+d)
综上所述
S(−a)S(d−1)=(b+c)!(b+c+a+d)!b!(a+b+d)!(a+d)!(b+d)!(d−a)!
从而
S(d−1)=a!b!(b+c)!(a+c)!(a+d)!(b+d)!(b+c+a+d)!(a+b+d)!(a+b+c)!