跳到正文
格致开物MATHWIKI

差分方程模型

差分方程模型(difference equation model)用离散时刻之间的更新关系描述变化。它的解是一串状态 x0,x1,x2,…:已知起始状态和每一步的规则,就可以逐步计算以后会怎样。月份、生产批次、繁殖季都可以成为步数;状态本身仍可以是实数,并不因为时间离散就必须取整数。

每月留下八成,再补入二十升

考虑一个教学用调蓄水箱。每个月先放出当前水量的20%,再补入20 L水,随后记录一次水量。假定放水比例与补入量固定,没有其他进出水,水箱容量足够。以下参数和数据都是按这一假设构造的,未取自实际水箱的测量。

令 xn 表示第 n 次记录的水量,单位为L;n 是从0开始的整数,每增加1代表经过一个月。初始记录为 x0=20。下一次先剩下 0.8xn,再加20,故 xn+1=0.8xn+20,x0=20. 这里的0.8是无量纲保留比例,20是每一步补入的水量。前几步可直接手算: x1=0.8×20+20=36,x2=0.8×36+20=48.8,x3=0.8×48.8+20=59.04. 增加量依次是16、12.8、10.24 L,逐次变小。虽然每月都补水,也不意味着水量无界增加,因为原有水量越大,同一比例放出的水也越多。

先放水后补水的顺序已经写入方程。若改成先补20 L再放出总水量的20%,规则就变为 xn+1=0.8(xn+20)=0.8xn+16。括号的位置对应不同的操作,不能省略为同一个模型。

下一步不变的水量,以及怎样得到全部状态

如果水量已经达到某个值 x∗,下个月仍然等于它,那么 x∗=0.8x∗+20. 把 0.8x∗ 移到左边得到 0.2x∗=20,所以 x∗=100 L。这是平衡点,也称更新函数的不动点:在100 L时,每月恰好放出20 L,又补入20 L。

仅仅求得平衡点,还没有证明从20 L出发会趋向它。为追踪差距,把原递推减去平衡关系: xn+1−100=0.8xn+20−100=0.8(xn−100). 令 en=xn−100 表示带正负号的偏差,则 en+1=0.8en。连续应用这一等式,得到 e1=0.8e0、e2=0.82e0,一般地 en=0.8ne0,xn=100+(x0−100)0.8n. 代入 x0=20,得到 xn=100−80(0.8)n. 这个公式满足初值;把它代入更新式,右边变成 100−80(0.8)n+1,也正是下一项。因此它给出了整条解,而不只是前几个月的拟合曲线。

由于 0.8n>0 并趋向0,本例水量始终低于100 L,且单调增加。若把初值换成160 L,公式则为 xn=100+60(0.8)n,水量会从上方单调减少。下图的两串点分别描绘这两种情况;连线只帮助追踪相邻记录,不规定两次记录之间的实际水流过程。

从二十升和一百六十升出发的两组每月水量点,分别从下方和上方接近一百升平衡线
同一更新规则可以产生不同的解;两条解到100 L的偏差都每步缩小为原来的八成。

假如希望水量与100 L相差不超过1 L,需要多少步?条件是 80(0.8)n≤1. 两边取自然对数,得到 nlog⁡0.8≤−log⁡80。由于 log⁡0.8<0,除以它时不等号反向,故 n≥log⁡(1/80)log⁡0.8≈19.638. 步数取整数,所以最少20步。复核边界:第19步仍差约1.1529 L,第20步差约0.9223 L。从20 L出发不会在任何有限步恰好达到100 L;“达到平衡”若指实际操作,通常要明确容许误差。

蛛网图为什么要来回走

递推 xn+1=F(xn) 可以画在同一坐标平面里。横轴表示当前值,纵轴表示更新后的值。画出 y=F(x)=0.8x+20,另画辅助直线 y=x。

从横轴的20开始,竖直走到更新函数,得到点 (20,36)。这一步读出了下一项36。要继续用36作为横坐标,就水平走到 y=x 上的 (36,36);再竖直走到 (36,48.8),便得到下一个更新结果。以后重复“竖直到函数、水平到对角线”,就是蛛网图的构造。

直线y等于零点八x加二十与对角线y等于x相交于一百一百,从二十开始的阶梯反复竖直到更新直线再水平到对角线
阶梯的两个方向分别完成“算出下一项”和“把下一项搬到横轴”。两条直线的交点就是平衡点。

在100以下,更新直线位于对角线上方,所以下一项比当前项大;在100以上则相反。但这种上下关系本身不足以保证没有超调。本例的确不会越过100,是因为 xn+1−100=0.8(xn−100) 保留了偏差的符号。图上看见的阶梯收缩,正对应已经证明的八成缩小关系。

一阶仿射递推的通式与稳定性

把保留比例与补入量写成一般常数,得到 xn+1=axn+b. 它通常称为一阶线性非齐次差分方程;从更新函数的角度看,ax+b 是仿射函数。“一阶”表示下一步只需当前状态;如果规则还依赖 xn−1,就需要保存更多历史状态。显式的二阶规则例如 xn+2=xn+1+xn,需要给定两个起始值。取 x0=0,x1=1,才能依次确定后面的1、2、3、5等项。斐波那契在1202年提出的兔子繁殖问题就形成这种二阶递推结构,具体假设与按月计数见Chasnov,《Mathematical Biology》§2.1,印刷页15。

当 a≠1 时,平衡点是 x∗=b/(1−a)。同样相减,可得 xn=x∗+an(x0−x∗). 也可以逐次展开:初始水量留下 anx0,每一步补入的量经历不同次数的保留,因此 xn=anx0+b(1+a+⋯+an−1)=anx0+b1−an1−a. 两种形式相同:一种突出距平衡多远,另一种突出初始量和历次输入分别贡献了多少。Marcel Oliver 的讲义《Difference Equations》§2给出了含变系数情形的一般递推解法。

称平衡点稳定,是指初值足够接近它时,以后始终保持接近;在此基础上,附近轨迹还趋于它,则称渐近稳定。对于上面的仿射递推,这些性质直接由 |an(x0−x∗)| 决定。

参数 偏差的变化 平衡点性质
0<a<1 同号、逐步缩小 渐近稳定,单侧趋近
a=0 一步后偏差为零 一步到达平衡
−1<a<0 正负交替,绝对值缩小 渐近稳定,交替趋近
a=−1 正负交替,绝对值不变 稳定但不渐近稳定,非平衡解为二周期
|a|>1 非零偏差的绝对值增大 不稳定

例如 xn+1=160−0.6xn 的平衡点仍是100。取 x0=120,有 x1=88、x2=107.2、x3=95.68;偏差20、−12、7.2、−4.32逐次换号缩小。这可以表示围绕目标的过度调节,却不再是“留下负六成水量”的物理保留过程。数学参数允许什么,与具体机制允许什么,要分别检查。

此前除以了 1−a,所以还须处理 a=1。此时 xn=x0+nb:若 b≠0 就没有平衡点;若 b=0 则每个状态都是平衡点,邻近的初值各自停在原处,并不互相靠拢。

非线性更新怎样在平衡附近判断

对较一般的 xn+1=F(xn),先解 F(x∗)=x∗。若 F 在平衡附近连续可微,且 |F′(x∗)|<1,可以选取一个小邻域及常数 q<1,使邻域里处处有 |F′(x)|≤q。利用中值定理, |F(x)−F(x∗)|≤q|x−x∗|. 只要初值在这个邻域里,下一项离平衡更近,仍留在邻域;逐步应用得到 |xn−x∗|≤qn|x0−x∗|→0。这既证明稳定,也证明吸引性。

若 |F′(x∗)|>1,可在小邻域内取得下界 |F′(x)|≥q>1,同一中值定理使每一步非零偏差至少放大 q 倍,直到离开该邻域,因此不稳定。若导数绝对值恰好为1,这一检验不作结论。例如 F(x)=x−x3 在0附近会把小偏差缩小,F(x)=x+x3 则放大,两者在0的导数却都是1。详细条件与证明见Oliver,§3,定理3。

离散模型、连续采样与欧拉近似

水箱的逐月操作本来就定义了离散过程。若另设持续进水和持续排水,则可以建立微分方程 dxdt=q−κx,q>0,κ>0. 这里 t 以月计,q 是L/月,κ 是每月的连续排出率。平衡水量为 x∗=q/κ,其精确解为 x(t)=x∗+(x(0)−x∗)e−κt。每隔 h 个月记录一次,精确记录满足 xn+1=e−κhxn+x∗(1−e−κh). 这不是近似,是连续方程在离散时刻的精确采样关系。

另一种做法,是把一段时间内的变化率近似冻结在该段起点,即显式欧拉法: xn+1=xn+h(q−κxn)=(1−κh)xn+qh. 它用 1−κh 近似 e−κh。由指数展开 e−z=1−z+z2/2+⋯,可见只保留到一次项时漏掉了从二次开始的项。这里控制近似程度的是无量纲步长 z=κh,而不只是步长数字看上去是否小。

例如取 q=20 L/月、κ=0.2 每月、h=1 月,欧拉法恰好给出开头的 0.8xn+20;但连续方程的精确采样是 0.818731xn+18.126925。从20 L出发,一个月后的连续精确值约为34.5015 L,欧拉值为36 L。两个模型的平衡都是100 L,过程仍有差别。

若坚持让连续方程的月度精确采样与原递推完全相同,应取 κ=−log⁡0.8≈0.223144 每月,并令 q=100κ≈22.314355 L/月。它们是由月度保留关系反推的连续参数,不能把“每月排出20%”直接当作连续率0.2而又声称精确相同。

步长怎样制造振荡甚至发散

连续误差满足 e′=−κe,始终同号并逐渐消失。欧拉误差却满足 en+1=(1−κh)en. 因此渐近稳定要求 |1−κh|<1,也就是 0<κh<2。在 1<κh<2 时,它虽能衰减,却会交替越过平衡;在 κh=2 时偏差不衰减;大于2时偏差被放大。若还要求对所有非负初值都保持非负更新,一个充分条件是 0≤κh≤1,使保留系数和输入项都非负。这比只要求渐近稳定更强。

下图取非平衡初值 e0≠0,把偏差除以初始偏差,令 E=e/e0,再以 τ=κt 作为横轴。图中用 δ=κh 标记无量纲步长。连续曲线都是 E=e−τ。三种欧拉步长的乘数分别为0.5、−0.5、−1.2,因而依次出现同侧衰减、交替衰减和交替放大。变化的是算法步长,同一连续方程并未发生新的振荡机制。

三幅误差图比较连续指数衰减曲线与欧拉点列,无量纲步长零点五时同侧衰减,一点五时交替衰减,二点二时交替发散
精确采样乘数始终为正的指数;欧拉乘数可以变成负数,甚至绝对值超过一。折线仅连接计算点。

这类稳定性来自每一步误差的放大因子,见Driscoll 与 Braun,《Fundamentals of Numerical Computation》§11.3。判据通过也不保证当前步长已足够准确,还需比较更小步长、精确解或独立误差估计。

输入不精确时,结论能维持到什么程度

假设仍保留八成,但每月实际补入量比20 L多或少 ηn,且 |ηn|≤ε。用 dn 表示这条受扰轨迹与原轨迹之差,则 dn+1=0.8dn+ηn. 展开后有 dn=(0.8)nd0+∑j=0n−1(0.8)n−1−jηj. 每一项的意义是:早期输入误差已经经历多次衰减,最新误差还没有衰减。取绝对值并把有限等比和相加,得到 |dn|≤(0.8)n|d0|+5ε(1−(0.8)n). 从同一初值出发,若每次输入误差不超过0.1 L,长期轨迹差就不超过0.5 L。若每次都多补0.1 L,新的平衡正是 20.1/0.2=100.5 L,说明这个上界可以逼近。它也适用于同样形式的逐步计算误差,但实际水箱的保留比例变化、容量溢流等机制需要另建方程,不能一概归入固定的输入误差。

两期记忆怎样变成一阶状态系统

开头的水箱只需知道本月水量,就能计算下月水量。有些反馈规则还要读取上一次记录:例如一个无量纲偏差按

en+2=0.6en+1+0.16en

更新。若 e0=10,e1=6,则 e2=5.2;若保持当前值 e1=6,却把上一期改为 e0=−10,下一期就变为 2。仅有“当前值”尚未包含决定下一步的全部信息。

把最近两期合在一起,定义 zn=(en+1,en)𝖳,就可以写成

zn+1=(0.60.1610)zn.

第一行计算新偏差,第二行把原来的当前值保存为上一期。下图的窗口每次移一格;“一阶”现在是指下一份完整状态只需当前这份完整状态,而不是说模型忘掉了过去。

两期窗口由十六移到六五点二,再移到五点二四点零八,展示保存上一期对计算下一期的作用。
通过增加状态分量,跨期记忆可以写成一阶向量更新。

二阶线性差分方程将从这个例子推导两个特征根 0.8、−0.2,说明同一条序列如何叠加两种衰减模式。更一般地,保存有限多期可得到更高维状态;保存连续的一整段历史则通向时滞微分方程,初始资料也随之改变。

从固定乘数走向非线性周期

一阶不代表行为简单。仿射规则的偏差一直乘同一个数;非线性映射中的局部倍率则会随状态变化。例如洛吉斯蒂映射 xn+1=ρxn(1−xn) 在 0≤ρ≤4 时把 [0,1] 保持在自身内,但从一个固定点附近离开后,轨迹不必向无穷远发散,也可能被其他吸引集合接住。

在 ρ=3.2 时,正不动点为 1−1/3.2=0.6875,其导数 −1.2 表示小扰动会离开该点。然而另有约为 0.51304451、0.79945549 的两点互相映到对方,两步导数乘积为 0.16。这一对点能够吸引附近轨迹。这里“不动点不稳定”与“全部解无界”是不同命题。

周期点的分析把一阶方法继续使用:若经过 k 步回到原处,就研究复合映射 Fk 的不动点;导数是这一圈各步导数的乘积。平衡点与稳定性补充稳定的精确定义,线性化与雅可比矩阵则把同样思路推广到多个状态分量。

相关条目与参考资料

从离散更新转向瞬时变化率,可继续阅读微分方程、一阶线性微分方程;状态依赖的增长可见洛吉斯蒂模型;多状态相互影响可见捕食者-猎物模型。模型单位的核对见量纲分析。