二阶齐次线性递推通项公式的寻找
前置技能:斐波那契数列与二阶线性递推
斐波那契数列f(n)是递归定义的:
f(n)=f(n−1)+f(n−2),n≥2
其中f(0)=0,f(1)=1。如果使用艾弗森约定处理分段,可以用一个公式统一:
f(n)=f(n−1)+f(n−2)+[n=1]
一般地,一个二阶线性递推式被递归地定义:
g(n)=αg(n−1)+βg(n−2),n≥2
其中g(0)=λ,g(1)=μ。同样地,使用艾弗森约定可以变形为:
g(n)=αg(n−1)+βg(n−2)+λ[n=0]+(μ−λα)[n=1]
容易证明这两种表达形式具有等价性。
技术:生成函数
一个数列g(n)的生成函数为G(n)=⟨g(n)⟩,被定义为:
G(n)=∑ng(n)zn
其中z是一个形式变量。其中许多生成函数可以被写成紧凑的封闭形式,《具体数学》中指出,在写成封闭形式时我们一般不必考虑级数的收敛性。我们考虑一种特殊形式生成函数的封闭形式,其中g(n)=kρn,根据定义有:
G(n)=∑nkρnzn=k+ρz∑ngnzn=k+ρzG(n)
解得:G(n)=k1−ρz
反过来,如果我们知道了一个函数的生成函数形如:G(n)=k1−ρz,我们就可以断言,这个数列的第n项必然是[zn]G=ρn。这将是我们解决问题的关键。
计算过程
g(n)=αg(n−1)+βg(n−2)+λ[n=0]+(μ−λα)[n=1]
由于g(n−1)=⟨0,g(0),g(1),…⟩,可以发现其生成函数为zG(n)。同样的,g(n−2)的生成函数是z2G(n)。对于仅在n=1时有值的项(μ−λa)[n=1],其生成函数自然是(μ−λa)z。上式被改写为:
G(n)=αzG(n)+βz2G(n)+λ+(μ−λa)z
解方程得到:
G(n)=λ+(μ−λα)z1−αz−βz2
考虑将这个式子表示成A1−pz+B1−qz的形式,以便用上面的技术解决问题。通分后得到分母的方程:
(1−pz)(1−qz)=1−αz−βz2
也就是:
pq=−βp+q=α
解得:
p=α+t2,q=α−t2,t=α2+4β−−−−−−√
分子的方程则是:
A(1−qz)+B(1−pz)=λ+(μ−λα)z
展开并解方程,得到:
A=λt−λα+2μ2t,B=λα+λt−2μ2t
则我们断言,原方程第n项[zn]G=Apn+Bqn。整理后也就是:
λt−λα+2μ2t(α+t2)n+λα+λt−2μ2t(α−t2)n
代入数据发现可以满足斐波那契数列和一些小的情景,我们基本可以确定这个公式的正确性。
其他
运用同样的技术,我们可以方便地处理含有常数项甚至f(n)项的线性递推数列。