参考文章
引入
对于一些递推式,我们常常会有关于求数列某一项的问题,如果我们能推出其通项公式,那么问题就会变得更好解决,特征方程就是一个有力的工具。
相关定义及引理
我们定义对于数列 fn f n 递推关系 fn=w0+∑ki=1wi∗fn−k+i−1(n>k) f n = w 0 + ∑ i = 1 k w i ∗ f n − k + i − 1 ( n > k )
我们给出两个引理:
引理1:对于一个 w0=0 w 0 = 0 的递推式,若有数列 {an} { a n } 满足递推关系,那么数列 {Aan} { A a n } 也满足递推关系。
引理2:对于一个 w0=0 w 0 = 0 的递推式,若有数列 {an} { a n } 和 {bn} { b n } 满足递推关系,那么数列 {an+bn} { a n + b n } 也满足递推关系
对于引理1的证明是比较简单的,既然 {an} { a n } 满足 an=∑ki=1wi∗an−k+i−1 a n = ∑ i = 1 k w i ∗ a n − k + i − 1 ,那么我们在两边同乘上A,并把右边的A乘在f的系数之前即得证,即 Aan=∑ki=1wi∗Aan−k+i−1(n>k) A a n = ∑ i = 1 k w i ∗ A a n − k + i − 1 ( n > k )
引理2也比较好证。我们知道 an=∑ki=1wi∗an−k+i−1 a n = ∑ i = 1 k w i ∗ a n − k + i − 1 , bn=∑ki=1wi∗bn−k+i−1 b n = ∑ i = 1 k w i ∗ b n − k + i − 1 ,左右分别相加再提取公因式,即 an+bn=∑ki=1wi∗an−k+i−1+∑ki=1wi∗bn−k+i−1=∑ki=1wi∗(an−k+i−1+bn−k+i−1) a n + b n = ∑ i = 1 k w i ∗ a n − k + i − 1 + ∑ i = 1 k w i ∗ b n − k + i − 1 = ∑ i = 1 k w i ∗ ( a n − k + i − 1 + b n − k + i − 1 ) 。
所以如果我们有一些数列满足某递推关系,那么我们对其进行线性组合得到通项公式。一般地,我们认为k阶需要k个线性组合。
一次线性递推式
我们称形如 fn=Afn−1+B f n = A f n − 1 + B 的递推式为一次线性递推式,即当k=1时。
怎么由它推导得出我们需要的通项公式呢,我们只需要用一个小trick就够了。
我们对这个数列进行偏移,得到一个等比数列 {fn+t} { f n + t } 。不妨令 fn+t=q(fn−1+t) f n + t = q ( f n − 1 + t ) ,则 fn=qfn−1+qt−t f n = q f n − 1 + q t − t
那么我们会得到两个方程:
解之得
利用等比数列通项公式立知 fn=(f1+t)∗qn−1−t f n = ( f 1 + t ) ∗ q n − 1 − t
但有人就会问了,如果 A=1 A = 1 呢?此时我们再看递推关系式,那不就是一个简单的等差数列吗。
特殊的二次线性递推式
我们称形如 fn=Afn−1+Bfn−2+C f n = A f n − 1 + B f n − 2 + C 的递推式为二次线性递推式,即当k=2时。
我们先来看一个特殊的二次线性递推式,当C=0时,即有 fn=Afn−1+Bfn−2 f n = A f n − 1 + B f n − 2 。那么我们仍然希望做出一个偏移,使得这个序列能像一次一样处理。
不妨设 fn−tfn−1=q(fn−1−tfn−2) f n − t f n − 1 = q ( f n − 1 − t f n − 2 )
即 fn=(q+t)fn−1−qtfn−2 f n = ( q + t ) f n − 1 − q t f n − 2 ,同样的我们有
注意到这和韦达定理的形式是一样的,那么我们可以构造一个一元二次方程,这个方程恰好是 x2−Ax−B=0 x 2 − A x − B = 0 。这就是这个递推式的特征方程。
从之前设的方程,我们知道一个以q为公比的等比数列满足该递推方程,那么现在我们解出了这两个可能的q值,我们可以这样表示通项公式 fn=A∗qn−11+B∗qn−12 f n = A ∗ q 1 n − 1 + B ∗ q 2 n − 1 。再代入 f1,f2 f 1 , f 2 的值,就可以解出A和B。
但这里我们同样没有讨论到特殊的情况,也就是当这个一元二次方程有两个相同的根时。我们重新回到之前所设的递推式,则有 fn−tfn−1=t(fn−1−tfn−2) f n − t f n − 1 = t ( f n − 1 − t f n − 2 )
则我们可以轻易地得到 fn=tfn−1+(f2−tf1)∗tn−2 f n = t f n − 1 + ( f 2 − t f 1 ) ∗ t n − 2
再同时除以
tn
t
n
可得一个新数列
我们容易知道
整理得 fn=[(2tf1−f2)+(f2−tf1)n]tn−2 f n = [ ( 2 t f 1 − f 2 ) + ( f 2 − t f 1 ) n ] t n − 2
但是一般地,我们认为这个表达式过于复杂,不如仍然设为 fn=(A+Bn)tn−1 f n = ( A + B n ) t n − 1 ,然后利用 f1,f2 f 1 , f 2 解之。
一般的二次线性递推式
上面说过了特殊情况,我们再来看一般的情况 fn=Afn−1+Bfn−2+C f n = A f n − 1 + B f n − 2 + C 。
对于这样的一个递推关系,我们同样希望能化为上面特殊情况的形式,同样的套路。设 fn+t=A(fn−1+t)+B(fn−2+t) f n + t = A ( f n − 1 + t ) + B ( f n − 2 + t )
展开即得 (A+B−1)t=C ( A + B − 1 ) t = C 。那么只需设 fn+t f n + t 为新的数列,就可以套用之前的方法解决了。
同样有一个问题,可能存在 A+B−1=0 A + B − 1 = 0 的情况。
那么既然无法偏移,我们设 fn−tfn−1=q(fn−1−tfn−2)+C f n − t f n − 1 = q ( f n − 1 − t f n − 2 ) + C
则相当于一个 gn=qgn−1+C g n = q g n − 1 + C ,用一次线性递推式解决之。