线性递推数列的特征根解法
1.线性递推方程
简单的说,对于一个数列,设
f
(
n
)
f(n)
f(n)为该数列的第n项,如果我们找到了一个递推式,使得f(n)可以表示为它前面的若干项的常系数一次多项式,则称它是一个线性递推数列。
如斐波那契数列:
f
(
n
)
=
f
(
n
−
1
)
+
f
(
n
−
2
)
f(n)=f(n-1)+f(n-2)
f(n)=f(n−1)+f(n−2) 就是一个线性递推方程。
卡特兰数列:
f
(
n
)
=
∑
i
=
0
n
−
1
f
(
i
)
f
(
n
−
1
−
i
)
f(n)=\sum_{i=0}^{n-1}f(i)f(n-1-i)
f(n)=∑i=0n−1f(i)f(n−1−i)就不是一个线性递推方程。
线性递推方程又可以分为齐次和非齐次两种。
齐次线性递推方程是指除了数列中的若干项的线性组合外,没有其他部分了。
如f(n)=f(n-1)+f(n-2)。这是一个齐次线性递推方程。
而如果还存在其他项且不为0,则是非齐次线性递推方程。
如果f(n)=f(n-1)+f(n-2)+C(n),C(n)是一个非0的项,它可以是常数,也可以是关于n的一个函数。那么它就是非齐次线性递推方程。
如果线性递推方程中f(n)表示为其前k项的线性组合,则称它为k阶线性递推方程。
2.齐次线性递推方程的通解
我们发现,对于一个k阶齐次线性递推方程:
(1)
a
n
=
p
1
a
n
−
1
+
p
2
a
n
−
2
+
⋯
+
p
k
a
n
−
k
a_n=p_1a_{n-1}+p_2a_{n-2}+\dots+p_ka_{n-k} \tag{1}
an=p1an−1+p2an−2+⋯+pkan−k(1),要想唯一的确定的该数列,必须给出k个初始值{
a
0
,
a
1
,
…
,
a
k
−
1
a_0,a_1,\dots,a_{k-1}
a0,a1,…,ak−1}。如果不给出初始值,则可能会有许多的数列都符合这个递推式。这些数列可以称之为此递推式的通解。
我们发现等比数列比较符合这种齐次线性递推方程式。设公比为q,线性递推方程两边乘上公比,左边可以由
a
n
a_n
an转移到
a
n
+
1
a_{n+1}
an+1,等式仍然成立。我们大胆假设
a
n
=
x
n
,
(
x
≠
0
)
a_n=x^n,(x \neq 0)
an=xn,(x̸=0),代入上述递推方程式,则有
(2)
x
n
=
p
1
x
n
−
1
+
p
2
x
n
−
2
+
⋯
+
p
k
x
n
−
k
x^n=p_1x^{n-1}+p_2x^{n-2}+\dots+p_kx^{n-k} \tag{2}
xn=p1xn−1+p2xn−2+⋯+pkxn−k(2)
因为x不为0,所以两边除以
x
n
−
k
x^{n-k}
xn−k,得到
(3)
x
k
=
p
1
x
k
−
1
+
p
2
x
k
−
2
+
⋯
+
p
k
x^k=p_1x^{k-1}+p_2x^{k-2}+\dots+p_k \tag{3}
xk=p1xk−1+p2xk−2+⋯+pk(3)
考虑复根,这个方程有k个根.我们先假设没有重根。那么,这k个根都能使得(1)成立。
于是我们可以得到原k阶齐次线性递推方程(1)的k个数列,第i个数列即是一个公比为
x
i
x_i
xi的等比数列。
根据乘法分配律,我们知道,如果
α
\alpha
α和
β
\beta
β是符合(1)的两个数列,则数列
C
1
α
+
C
2
β
C_1\alpha+C_2\beta
C1α+C2β也符合式(1)。所以,式(1)的k个解的任意线性组合也是式(1)的解。我们称这k个等比数列为式(1)的基底。于是我们可以知道式(1)的通解可以表示为以下形式:
a
n
=
C
1
x
1
n
+
C
2
x
2
n
+
⋯
+
C
k
x
k
n
a_n=C_1x_1^n+C_2x_2^n+\dots+C_kx_k^n
an=C1x1n+C2x2n+⋯+Ckxkn
设线性递推方程的表示的数列的前k项值为{
b
0
,
b
1
,
…
,
b
k
−
1
b_0,b_1,\dots,b_{k-1}
b0,b1,…,bk−1},则有
(4)
{
C
1
x
1
0
+
C
2
x
2
0
+
⋯
+
C
k
x
k
0
=
b
0
C
1
x
1
1
+
C
2
x
2
1
+
⋯
+
C
k
x
k
1
=
b
1
…
…
C
1
x
1
k
−
1
+
C
2
x
2
k
−
1
+
⋯
+
C
k
x
k
k
−
1
=
b
k
−
1
\left \{ \begin{array} {rcl} C_1x_1^0+C_2x_2^0+\dots+C_kx_k^0&=&b_0 \\ \\C_1x_1^1+C_2x_2^1+\dots+C_kx_k^1&=&b_1 \\ \\ \dots \\ \dots \\ \\ C_1x_1^{k-1}+C_2x_2^{k-1}+\dots+C_kx_k^{k-1}&=&b_{k-1}\end{array}\right.\tag{4}
⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧C1x10+C2x20+⋯+Ckxk0C1x11+C2x21+⋯+Ckxk1……C1x1k−1+C2x2k−1+⋯+Ckxkk−1===b0b1bk−1(4)
用矩阵表示为:
(
1
1
…
1
x
1
1
x
2
1
…
x
k
2
⋮
⋮
⋮
⋮
x
1
k
−
1
x
2
k
−
1
…
x
k
k
−
1
)
(
C
1
C
2
⋮
C
k
)
=
(
b
0
b
1
⋮
b
k
−
1
)
\left( \begin{matrix} 1 & 1 &\dots & 1 \\ x_1^1 &x_2^1 & \dots &x_k^2 \\ \vdots & \vdots&\vdots &\vdots \\ x_1^{k-1} &x_2^{k-1} & \dots &x_k^{k-1} \end{matrix} \right) \left( \begin{matrix} C_1 \\ C_2 \\ \vdots \\ C_k \end{matrix} \right)= \left( \begin{matrix} b_0 \\b_1 \\ \vdots \\b_{k-1} \end{matrix} \right)
⎝⎜⎜⎜⎛1x11⋮x1k−11x21⋮x2k−1……⋮…1xk2⋮xkk−1⎠⎟⎟⎟⎞⎝⎜⎜⎜⎛C1C2⋮Ck⎠⎟⎟⎟⎞=⎝⎜⎜⎜⎛b0b1⋮bk−1⎠⎟⎟⎟⎞
其中第一个矩阵为著名的范德蒙德矩阵,它的行列式为
(5)
∏
1
≤
j
<
k
≤
n
(
x
k
−
x
j
)
\prod_{1\leq j < k \leq n}(x_k-x_j) \tag{5}
1≤j<k≤n∏(xk−xj)(5),因为没有重根,所以行列式值不为0。所以该矩阵有逆矩阵,方程(4)有解。
于是可以得到齐次线性递推方程的通解。
如果有重根,设重根为x1=x2,则方程在x1处的导数为0。
根据式(3),得:
(6)
k
x
k
−
1
=
p
1
(
k
−
1
)
x
k
−
2
+
p
2
(
k
−
2
)
x
k
−
3
+
⋯
+
p
k
−
1
kx^{k-1}=p_1(k-1)x^{k-2}+p_2(k-2)x^{k-3} +\dots+p_{k-1} \tag{6}
kxk−1=p1(k−1)xk−2+p2(k−2)xk−3+⋯+pk−1(6)
因为x不为0,两边再乘上x,得到:
(7)
k
x
k
=
p
1
(
k
−
1
)
x
k
−
1
+
p
2
(
k
−
2
)
x
k
−
2
+
⋯
+
p
k
−
1
x
+
p
k
∗
0
∗
x
0
kx^k=p_1(k-1)x^{k-1}+p_2(k-2)x^{k-2}+\dots+p_{k-1}x+p_k*0*x^0 \tag{7}
kxk=p1(k−1)xk−1+p2(k−2)xk−2+⋯+pk−1x+pk∗0∗x0(7)
将(3)+(7),然后再乘上x,则可得:
(
k
+
1
)
x
k
+
1
=
p
1
k
x
k
+
p
2
(
k
−
1
)
x
k
−
1
+
⋯
+
p
k
−
1
2
x
2
+
p
k
x
(k+1)x^{k+1}=p_1kx^k+p_2(k-1)x^{k-1}+\dots+p_{k-1}2x^2+p_kx
(k+1)xk+1=p1kxk+p2(k−1)xk−1+⋯+pk−12x2+pkx
当x取x1时,等式成立。
由此可见,
n
x
1
n
构
成
的
数
列
nx_1^n构成的数列
nx1n构成的数列也是线性递推方程的一个解。
于是通解
a
n
a_n
an可写为:
a
n
=
(
C
1
+
n
C
2
)
x
1
n
+
C
3
x
2
n
+
⋯
+
C
k
x
k
−
1
n
a_n=(C_1+nC_2)x_1^n+C_3x_2^n+\dots+C_kx_{k-1}^n
an=(C1+nC2)x1n+C3x2n+⋯+Ckxk−1n
3.非齐次线性递推方程的通解
给出一个线性递推方程: (8) a n + p 1 a n − 1 + p 2 a n − 2 + ⋯ + p k a n − k = f ( n ) a_n+p_1a_{n-1}+p_2a_{n-2}+\dots+p_ka_{n-k}=f(n)\tag{8} an+p1an−1+p2an−2+⋯+pkan−k=f(n)(8)
若
f
(
n
)
f(n)
f(n)不为0,则式(8)称为非齐次线性递推方程。
f
(
n
)
f(n)
f(n)可以为常数,也可以为关于n的多项式,也可以为以n为指数的表达式。
对于这类方程,我们可以通过构造法,将它变成齐次线性递推方程。
构造
t
n
t_n
tn满足:
t
n
+
p
1
t
n
−
1
+
p
2
t
n
−
2
+
⋯
+
p
k
t
n
−
k
=
f
(
n
)
t_n+p_1t_{n-1}+p_2t_{n-2}+\dots+p_kt_{n-k}=f(n)
tn+p1tn−1+p2tn−2+⋯+pktn−k=f(n)
其中
t
n
t_n
tn称为非线性递推方程的特解。
设
b
n
=
a
n
−
t
n
b_n=a_n-t_n
bn=an−tn.
则
b
n
b_n
bn满足:
(9)
b
n
+
p
1
b
n
−
1
+
p
2
b
n
−
2
+
⋯
+
p
k
b
n
−
k
=
0
b_n+p_1b_{n-1}+p_2b_{n-2}+\dots+p_kb_{n-k}=0 \tag{9}
bn+p1bn−1+p2bn−2+⋯+pkbn−k=0(9)
b
n
b_n
bn可以通过齐次线性递推方程求解。
它是齐次线性递推方程的通解。于是
a
n
=
b
n
+
t
n
a_n=b_n+t_n
an=bn+tn,即非齐次线性递推方程的解可由齐次方程的通解和特解求得。
那如何求
t
n
t_n
tn呢?
可以用待定系数法求出。
一般情况下,若f(n)为常数,则t_n也可以设为常数,若f(n)为n的m次多项式,则
t
n
t_n
tn也可以设为n的m次多项式,若f(n)为指数形式,如
f
(
n
)
=
q
n
f(n)=q^n
f(n)=qn,则可以设
t
n
=
r
q
n
t_n=rq^n
tn=rqn或
t
n
=
r
n
q
n
t_n=rnq^n
tn=rnqn的形式。然后用待定系数法解出。