分岔与混沌
混沌最反直觉的地方在于:它完全是确定性的。没有随机数,没有噪声,同样的初值永远给出同样的结果,但只要初值差了一点点,两条轨道很快就会分道扬镳。这一页想把"确定但不可预测"这件事从一句口号,变成几个能算出来的数。
本页实验台
LAB 01
Logistic 映射
蛛网图与时间序列并排,r 从 2.5 调到 4 一路看过去
不动点 1 − 1/r 及其稳定性—
检测到的周期—
李雅普诺夫指数 λ—
最后几个值—
把 r 从 1 慢慢推到 4,蛛网图会依次走过四种形态。r < 1:轨道掉到 0,种群灭绝。1 < r < 3:收敛到不动点 1 − 1/r,蛛网螺旋着收进去。r = 3 处不动点失稳(此时 |f′| = 1),出现周期 2;之后 3.449、3.544、3.564…… 一路倍周期下去。r > 3.5699 进入混沌,蛛网图变成一团永不重复的折线。不动点稳不稳定,判据是 |f′(x*)| 是否小于 1。对逻辑斯蒂映射 f′(x*) = 2 − r,所以 |2 − r| < 1 即 1 < r < 3——这条不等式就是上面那个 r = 3 的来历,可以在读数里核对。最后看李雅普诺夫指数这个读数:它在周期区是负的,在混沌区是正的,在分岔点恰好为零。这是判断"是不是混沌"最干净的量化标准,比肉眼看曲线乱不乱可靠得多。
LAB 02
分岔图
高分辨率绘制倍周期级联,可框选放大看自相似
周期 1 → 2 的分岔点—
周期 2 → 4—
周期 4 → 8—
(r₂−r₁)/(r₃−r₂) 与 Feigenbaum δ—
把 r 的左右端拖到 3.54 和 3.575 之间,你会看到一张和整体极其相似的图。再放大一次,还是相似。倍周期级联是自相似的——这是分形和混沌之间最直接的一条纽带。读数里算出的 (r₂−r₁)/(r₃−r₂) 应该接近 4.669,这就是 Feigenbaum 常数 δ。它的惊人之处在于普适性:不只是逻辑斯蒂映射,任何单峰映射(只要峰是二次的)走倍周期路线进入混沌时,这个比值都趋于同一个 4.6692…这个数和圆周率一样,是一个由结构而非由具体方程决定的常数。再把范围拖到 3.82 到 3.86。混沌区里会突然冒出一条干净的周期 3 轨道——这就是周期窗口。而"周期 3 意味着混沌"是一条著名定理(Li–Yorke,1975):一个连续映射只要存在周期 3 的点,就必然存在所有周期的点。
LAB 03
洛伦兹吸引子
三维轨道实时绘制,初值差 0.0001 的两条轨道多久分道扬镳
当前参数下的行为—
两条轨道分开到 1 用了多久—
分离速率(斜率)≈ λ—
可预测时间 ≈ ln(1/ε)/λ—
两条轨道的初始差异是 10⁻⁶,也就是百万分之一。右下那张图的纵轴是它们距离的对数:前一段是一条漂亮的直线,说明距离在指数增长,斜率就是最大李雅普诺夫指数(洛伦兹经典参数下约 0.9);等距离涨到吸引子本身的尺度就饱和了,因为两条轨道再怎么分也不会跑出吸引子。这条直线给出一个极其实用的估计:可预测时间 ≈ ln(1/ε)/λ。把初始误差缩小 1000 倍(ε 从 10⁻⁶ 到 10⁻⁹),可预测时间只从 15.5 延长到 25.8,多了十个时间单位左右(理论上是 ln(1000)/λ ≈ 7.7,实测略多,因为分离在最初几步比渐近速率慢一些)。这就是天气预报为什么不会因为测量精度提高而能预报三个月:精度和可预测时长之间是对数关系,不是线性关系。再把 ρ 从 28 调到 14:吸引子消失,轨道收敛到一个定点,李雅普诺夫指数变负。混沌不是洛伦兹方程的固有属性,是某些参数下的属性。
LAB 04
李雅普诺夫指数
量化「对初值的敏感依赖」,与分岔图对齐显示
当前 r 的 λ—
这个 r 是周期还是混沌—
区间内 λ > 0 的比例—
第一个 λ = 0 的位置—
上下两张图的横轴是同一个 r,请上下对照着看。每一次倍周期分岔,λ 都会碰一下零然后掉回负值;进入混沌区之后 λ 翻到正的;而那些混沌区里的白色竖条(周期窗口),对应着 λ 又掉回负值。两张图的每一个细节都严丝合缝——这不是巧合,因为 λ 的定义就是"相邻轨道的平均分离速率",而周期轨道不分离、混沌轨道指数分离。λ 的实用价值在于它是一个数:面对一段实测数据,你没法用肉眼判断它是混沌还是噪声,但可以估计它的最大李雅普诺夫指数。(真实数据上这件事相当难,需要相空间重构、而且对噪声很敏感——但思路就是这一条。)顺带一提:λ > 0 只说明对初值敏感,还要加上"有界"和"非周期"两条,才构成通常意义上的混沌。
这一页想说的
混沌给建模带来的不是绝望,而是一条清楚的分界线:在可预测时间之内,确定性模型有效;超出之后,只能谈统计性质。天气预报(几天)和气候预测(几十年)不矛盾,正是因为它们问的是不同的问题——前者要具体轨道,后者只要吸引子的统计。所以遇到一个可能混沌的系统,第一件该做的事不是提高精度,而是估计它的李雅普诺夫指数,然后判断你想要的那个预测时长,究竟在不在可能的范围里。