累加 · 累乘 · 不动点
递推数列与不动点法
递推公式给出相邻项的关系,求通项就是把这个关系解开。高中范围内能解开的类型不多,但都对应一个固定套路:差已知的累加,比已知的累乘,形如
an+1=pan+q
的借不动点平移成等比数列。
1 · 累加法与累乘法
an+1−an=f(n)
时把
n=1,2,…,n−1
各式相加,左端只剩首末两项:
an=a1+k=1∑n−1f(k)
于是求通项化归成求和,f
是等差或等比时直接套闭式。an+1=an+2n、a1=1
给出
an=1+2⋅2(n−1)n=1+n(n−1),前几项
1,3,7,13,21。
anan+1=g(n)
时把各式相乘,左端只剩首末两项:an=a1∏k=1n−1g(k)。an+1=nn+1an、a1=2
时连乘的中间因子逐个抵消,得
an=2n。累乘法要求各项非零,否则比值无意义。
2 · 一阶线性递推与不动点
an+1=pan+q
里既有倍数又有常数项,直接累加或累乘都不成。办法是先把常数项吸收掉:解方程
x=px+q
得不动点
x=1−pq,两边同减这个
x:
an+1−x=p(an−x)
于是
{an−x}
是公比
p
的等比数列,an=(a1−x)pn−1+x。不动点的几何意义是这个递推的常数解:首项恰取
x
时数列恒等于
x,一步也不动。
例 2.1
a1=1、an+1=2an+3。不动点由
x=2x+3
得
x=−3,故
an+3=(1+3)⋅2n−1,即
an=4⋅2n−1−3=2n+1−3。核对首项:22−3=1。
图 2-1 · 迭代出的各项与不动点所在的水平线,右侧把闭式与逐项迭代并列。可调
p、q
与首项,把
∣p∣
越过
1
观察各项是收敛到不动点还是发散。
∣p∣<1
时
pn−1→0,各项收敛到不动点;∣p∣>1
时偏离被逐次放大,数列发散。p<0
时偏离每步换一次符号,各项在不动点两侧交替出现。这三种形态由
p
单独决定,q
只挪动不动点的位置,a1
只决定初始偏离的大小与方向。
3 · p = 1 处不动点不存在
p=1
时方程
x=x+q
无解(除
q=0
外),不动点不存在。此时递推本就是
an+1=an+q,即公差为
q
的等差数列,通项
an=a1+(n−1)q。
这一支在代码里必须单列。linearRecurrence 若不判
p=1
就直接算
1−pq,得到的是 Infinity;再拿它去算
(a1−x)pn−1+x
就是
−∞+∞,结果 NaN。而 NaN 不会抛错,它会顺着后续的比较与格式化一路传下去,图上表现为整条数列凭空消失。数值实现里这类「无解」的分支比公式里更要紧:公式失效时人会停下来讨论,浮点数不会。
注 · 不动点法能用的前提是
q
为常数。an+1=pan+f(n)(f
不是常数)时不动点方程本身随
n
变化,常见的办法是两边同除
pn+1
化成累加型,或者构造
bn=pnan。本页的 lab 只实现常数
q
的那一支,与 core/seq.ts 的接口一致。
4 · 参考文献
- Recurrence relation. Wikipedia. 递推关系的分类与一阶线性递推的解法。https://en.wikipedia.org/wiki/Recurrence_relation
- Fixed point (mathematics). Wikipedia. 不动点的定义及其在迭代中的作用。https://en.wikipedia.org/wiki/Fixed_point_(mathematics)
- Linear difference equation. Wikipedia. 线性差分方程的通解结构。https://en.wikipedia.org/wiki/Linear_difference_equation