跳到正文

一份计算物理课程汇报,题目是《从对流方程到可信的数值解》。幻灯片在线放映: soundadam.github.io/lorenz63,方向键翻页,按 N 打开讲稿。

一个悖论

用 scipy.solve_ivp 的 DOP853 积分 Lorenz 方程(σ=10, ρ=28, β=8/3),同一个初值, 一次 rtol=1e-6,一次 rtol=1e-12。前十个时间单位两条轨道贴得很好,然后各自脱钩, 差到吸引子的尺度。

哪一条是对的? 直觉说容差紧的那条。这在 t<10 时正确,在 t>40 时没有意义。

精度只换来对数的时间

把容差从 1e-4 扫到 1e-12,记下与参考解(rtol=1e-13)首次分离超过 1 的时刻:

rtol分离时刻
1e-45.69
1e-610.62
1e-816.11
1e-1020.71
1e-1226.88

分离时刻对 ln(1/rtol) 是一条直线,斜率是最大 Lyapunov 指数的倒数(λ₁ ≈ 0.904)。 折成每一位:多一位精度,只多 ln 10 / λ₁ ≈ 2.55 个时间单位。 双精度的地板在 10⁻¹⁶,所以单条轨道的预报极限大约是 41,再怎么收紧容差也过不去。

但统计量不动

同样三次计算(rtol 取 1e-6、1e-9、1e-13),单条轨道在 t=10.5 和 18.3 就已经报废; 可它们的 Lorenz 映射(z 的相邻两个局部极大)重合到线宽以内,厚度是 z 值域的 0.0086%; z 的不变密度之间最大总变差 1%,主要来自有限采样。Lyapunov 谱同样对容差不敏感, 三个指数之和与相空间散度 −(σ+1+β) 的偏差在 10⁻⁹ 量级。

同一组数据,按轨道看是废品,按统计量看是完好的。

判据随系统类型而变

系统类型验证手段长时间单条轨道
保守(哈密顿)不变量有界,用辛格式可信,误差多项式增长
耗散、非混沌收敛到正确的稳态或极限环可信
耗散、混沌统计量对方法与容差不敏感超过 1/λ₁ 量级不可信

守恒系统靠不变量验证,Lorenz 没有守恒量可查;混沌系统的单条轨道不可信,统计量可信。 汇报里用 Kepler 问题对照了第一行:Störmer–Verlet 的能量误差 1000 个周期不漂, RK4 的线性漂移,两者的「代价换时间」都是幂律,而 Lorenz 只有对数。

幻灯片里能玩的

  • 封面回放两条初值相差 10⁻⁵ 的轨道,看 |Δ| 在 t≈13.6 涨到 1
  • 开场悖论:自己换 rtol,看在哪个 t 与参考解脱钩
  • 拖动 ρ 看对流卷怎么转
  • 缩小初值差,看分离时刻只按对数后退

演示里的 DOP853 是照 scipy 的系数表用 JavaScript 重写的,在浏览器里实时积分。 讲台上用的两份打印稿也在同一个站点: 思维导图(A4 横向)与 板书小抄(A4 纵向)。

文中每个数字都由一个 Python 包实际算出,关键断言写成了测试——比如「三个 Lyapunov 指数之和等于散度」 和「分离时刻对 ln(1/rtol) 呈直线」。