Bootstrap

从递推式到通项公式 特征方程学习笔记

参考文章

ruanxingzhi

引入

对于一些递推式,我们常常会有关于求数列某一项的问题,如果我们能推出其通项公式,那么问题就会变得更好解决,特征方程就是一个有力的工具。

相关定义及引理

我们定义对于数列 fn f n 递推关系 fn=w0+ki=1wifnk+i1(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=1wiank+i1 a n = ∑ i = 1 k w i ∗ a n − k + i − 1 ,那么我们在两边同乘上A,并把右边的A乘在f的系数之前即得证,即 Aan=ki=1wiAank+i1(n>k) A a n = ∑ i = 1 k w i ∗ A a n − k + i − 1 ( n > k )

引理2也比较好证。我们知道 an=ki=1wiank+i1 a n = ∑ i = 1 k w i ∗ a n − k + i − 1 bn=ki=1wibnk+i1 b n = ∑ i = 1 k w i ∗ b n − k + i − 1 ,左右分别相加再提取公因式,即 an+bn=ki=1wiank+i1+ki=1wibnk+i1=ki=1wi(ank+i1+bnk+i1) 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=Afn1+B f n = A f n − 1 + B 的递推式为一次线性递推式,即当k=1时。

怎么由它推导得出我们需要的通项公式呢,我们只需要用一个小trick就够了。

我们对这个数列进行偏移,得到一个等比数列 {fn+t} { f n + t } 。不妨令 fn+t=q(fn1+t) f n + t = q ( f n − 1 + t ) ,则 fn=qfn1+qtt f n = q f n − 1 + q t − t

那么我们会得到两个方程:

{q=Aqtt=B(1) (1) { q = A q t − t = B

解之得
{q=At=BA1(2) (2) { q = A t = B A − 1

利用等比数列通项公式立知 fn=(f1+t)qn1t f n = ( f 1 + t ) ∗ q n − 1 − t

但有人就会问了,如果 A=1 A = 1 呢?此时我们再看递推关系式,那不就是一个简单的等差数列吗。

特殊的二次线性递推式

我们称形如 fn=Afn1+Bfn2+C f n = A f n − 1 + B f n − 2 + C 的递推式为二次线性递推式,即当k=2时。

我们先来看一个特殊的二次线性递推式,当C=0时,即有 fn=Afn1+Bfn2 f n = A f n − 1 + B f n − 2 。那么我们仍然希望做出一个偏移,使得这个序列能像一次一样处理。

不妨设 fntfn1=q(fn1tfn2) f n − t f n − 1 = q ( f n − 1 − t f n − 2 )

fn=(q+t)fn1qtfn2 f n = ( q + t ) f n − 1 − q t f n − 2 ,同样的我们有

{q+t=Aqt=B(3) (3) { q + t = A q t = − B

注意到这和韦达定理的形式是一样的,那么我们可以构造一个一元二次方程,这个方程恰好是 x2AxB=0 x 2 − A x − B = 0 。这就是这个递推式的特征方程。

从之前设的方程,我们知道一个以q为公比的等比数列满足该递推方程,那么现在我们解出了这两个可能的q值,我们可以这样表示通项公式 fn=Aqn11+Bqn12 f n = A ∗ q 1 n − 1 + B ∗ q 2 n − 1 。再代入 f1,f2 f 1 , f 2 的值,就可以解出A和B。


但这里我们同样没有讨论到特殊的情况,也就是当这个一元二次方程有两个相同的根时。我们重新回到之前所设的递推式,则有 fntfn1=t(fn1tfn2) f n − t f n − 1 = t ( f n − 1 − t f n − 2 )

则我们可以轻易地得到 fn=tfn1+(f2tf1)tn2 f n = t f n − 1 + ( f 2 − t f 1 ) ∗ t n − 2

再同时除以 tn t n 可得一个新数列

fntn=fn1tn1+f2tf1t2 f n t n = f n − 1 t n − 1 + f 2 − t f 1 t 2

我们容易知道

fntn=f1t+f2tf1t2(n1) f n t n = f 1 t + f 2 − t f 1 t 2 ∗ ( n − 1 )

整理得 fn=[(2tf1f2)+(f2tf1)n]tn2 f n = [ ( 2 t f 1 − f 2 ) + ( f 2 − t f 1 ) n ] t n − 2

但是一般地,我们认为这个表达式过于复杂,不如仍然设为 fn=(A+Bn)tn1 f n = ( A + B n ) t n − 1 ,然后利用 f1,f2 f 1 , f 2 解之。

一般的二次线性递推式

上面说过了特殊情况,我们再来看一般的情况 fn=Afn1+Bfn2+C f n = A f n − 1 + B f n − 2 + C

对于这样的一个递推关系,我们同样希望能化为上面特殊情况的形式,同样的套路。设 fn+t=A(fn1+t)+B(fn2+t) f n + t = A ( f n − 1 + t ) + B ( f n − 2 + t )

展开即得 (A+B1)t=C ( A + B − 1 ) t = C 。那么只需设 fn+t f n + t 为新的数列,就可以套用之前的方法解决了。

同样有一个问题,可能存在 A+B1=0 A + B − 1 = 0 的情况。

那么既然无法偏移,我们设 fntfn1=q(fn1tfn2)+C f n − t f n − 1 = q ( f n − 1 − t f n − 2 ) + C

则相当于一个 gn=qgn1+C g n = q g n − 1 + C ,用一次线性递推式解决之。

;