本节摘要:定义先行——庞加莱截面是在相空间切一张面、只记录轨道穿越点:连续轨道被压成点集,周期、准周期与混沌在截面上呈现为点、环与分形散点,一眼可辨。李雅普诺夫指数把"误差涨多快"压缩成一个数:λ 正即混沌,翻倍时间 = ln2/λ。本节给出两者的完整读法与可复现代码,把第三章的定性图鉴升级为定量体检单。
本节上承 3.4 的"误差翻倍账本"与 2.2 节的"频闪桥梁":庞加莱截面正是流与映射之间的那座桥,而李雅普诺夫指数是账本里的利率。体检的逻辑仍是对照:周期轨道的体检单全是一,混沌的体检单全是无穷——下表先睹为快。
| 项目 | 周期轨道 | 准周期(环面) | 混沌 |
|---|---|---|---|
| 截面点集 | 有限个点(周期 n 即 n 个) | 闭合曲线 | 分形散点 |
| 李雅普诺夫谱 | 全部 ≤ 0 | 全部 ≤ 0(两个零) | 至少一个正 |
| 功率谱 | 离散线 | 离散线(两个不可通约基频) | 连续宽谱 |
| 预测时限 | 无限 | 长期相位漂移 | ln2/λ 起算,指数耗尽 |
切法:在相空间选一张不含轨道切线的面 Σ,每当轨道从约定一侧穿过 Σ,记下穿越点。无限长的连续轨道被压缩成有限维面上的点集——这就是"降一维看长期"。最常用的特例是频闪截面:对周期为 T 的强迫系统,每隔 T 拍一次快照,等价于在相位固定的位置切面。
读法四句诀:一个点,周期一;n 个点,周期 n;闭曲线,准周期(轨道在环面上绕,截面是一圈);分形散点,混沌。点的排布还有二级信息:散点不是均匀雾而是有骨架(带、洞、层次)——那是吸引子的分形结构,4.1 节的盒计数维数可以直接在截面上量。

定义:λ = lim(t→∞) (1/t)·ln(|δ(t)|/|δ₀|),其中 δ(t) 是相邻轨道间距。λ>0 即指数分离(混沌),λ 的倒数给出"翻倍时间 ≈ ln2/λ"。直接跟踪 δ 会撞上两个障碍:饱和(间距涨到吸引子尺度就不涨了)与数值发散,实用算法是贝内坦重整化:每隔固定时间把间距拉回 d₀,只保留方向,把每段的 ln(增长) 记账累加,总账除以总时间就是 λ。账本如下:
import numpy as np def f(s): x, y, z = s return np.array([10 * (y - x), x * (28 - z) - y, x * y - 8 * z / 3]) def rk4(s, dt=0.002): k1 = f(s); k2 = f(s + dt / 2 * k1) k3 = f(s + dt / 2 * k2); k4 = f(s + dt * k3) return s + dt / 6 * (k1 + 2 * k2 + 2 * k3 + k4) s = np.array([1.0, 1.0, 1.0]) for _ in range(5000): # 丢弃暂态 10 个时间单位 s = rk4(s) d0 = 1e-8 s2 = s + np.array([d0, 0.0, 0.0]) acc, rounds, dt = 0.0, 4000, 0.002 for _ in range(rounds): s, s2 = rk4(s), rk4(s2) d = np.linalg.norm(s2 - s) acc += np.log(d / d0) s2 = s + (s2 - s) * (d0 / d) # 拉回 d0,方向不动 print("最大李雅普诺夫指数 ≈", round(acc / (rounds * dt), 3))
结果:约 0.9——与文献值 0.906 在第二位吻合,3.4 节"每 0.77 个时间单位误差翻倍"的账本从此有了可复现的出处。变式:把参数调到 ρ=20(非混沌区),同一算法给出约 −0.05 的负值——体检单上的负号就是"轨道互相靠拢"的直接证据。
背景:受迫阻尼单摆 θ'' = −sin θ − q·θ' + A·cos(ω_d t) 是混沌研究的经典实验台;取 A=1.2、ω_d=2/3、q=0.5 这组知名参数。
操作:积分几百个驱动周期,在每个周期末(相位相同处)采样:
import numpy as np from scipy.integrate import solve_ivp A, wd, q = 1.2, 2 / 3, 0.5 def rhs(t, s): th, om = s return [om, -np.sin(th) - q * om + A * np.cos(wd * t)] Td = 2 * np.pi / wd sol = solve_ivp(rhs, [0, 4000 * Td], [0.5, 0.0], rtol=1e-10, dense_output=True) n = np.arange(2000, 4000) pts = sol.sol(n * Td) # 每个驱动周期末拍一次照 print("前六个截面点:") print(np.round(pts[:, :6].T, 3))
结果:六个截面点彼此显著不同(摆角散布在若干弧度范围),且换初值重跑,散点的骨架形状不变。
解读:若系统锁定在周期一,六个点应完全重合(强迫周期即响应周期);散点且骨架可复现,正是"混沌吸引子"的操作性定义——乱而有形。变式:把 A 降到 0.2,同一段代码给出的截面点收敛到固定几点——用同一把尺子量出了"增益调低、混沌退场",这正是第六章结构工程里控制颤振的检查流程。
⚠️ 常见坑:估计 λ 时不做重整化,直接量长程间距——饱和效应会把 0.906 矮化成 0.1 量级的假象;同样,截面点不丢弃暂态会把吸引域的"过渡轨迹"也记进点集,图样被污染。
💡 关键直觉:庞加莱截面与李雅普诺夫指数是同一件事的几何面与数字面——截面告诉你"点集长什么样",指数告诉你"点集为什么长成这样"。报告混沌时两者一起给,缺一个都算体检没做完。
到此为止系统方程都是已知的。最后一节翻过来:只有一段数据,能不能把方程读出来。