1983 - Ruth 辛積分器——保結構的數值方法#
案件摘要#
1983 年,Ruth 在 IEEE 論文中提出辛積分器(symplectic integrator)的第一個顯式三階方法: 設計數值積分時,不只追求「單步精度」,而是要求每一步都保持辛結構(正則 2-形式)——
傳統方法(如 RK4)單步誤差小,但長期模擬能量系統性漂移; 辛積分器能量有微小振盪但永不漂移。天體力學、分子動力學、加速器物理的長期模擬從此改觀。
前因#
- 混沌與長期模擬的需求:Poincaré(1890)與 KAM(1954)揭示了相空間結構(見 1890-Poincare三體問題.md、1954-KAM定理.md), 但傳統數值方法會破壞這些結構——KAM 環面在 RK4 的長期模擬中會「漏氣」。
- 劉維爾定理(1838):正則流不可壓縮(見 1843-Jacobi正則變換.md)——數值流若可壓縮,長期統計必然失真。
- FPUT 實驗(1955)的教訓:電腦模擬是第三種偵探方法(見 1955-FPUT實驗.md),但方法本身必須保真。
- 太陽系數值積分的困境:1970s 的長期模擬(百萬年尺度)顯示能量緩慢漂移——是物理還是數值誤差?無法分辨。
線索與推理#
偵查線索 1:傳統方法的漂移病因#
以諧振子 \(H = \frac{1}{2}(p^2 + q^2)\) 為例,Euler 顯式法:
一步變換的矩陣 \(M = \begin{pmatrix} 1 & \Delta t \\ -\Delta t & 1 \end{pmatrix}\) , \(\det M = 1 + \Delta t^2 > 1\) —— 面積放大,且 \(|M| > 1\) ⇒ 能量 \(E_n \sim (1 + \Delta t^2)^{n} E_0\) 指數漂移。 病因:Euler 法不是辛的。
偵查線索 2:保辛的「手術」——半隱式 Euler#
只調整一步順序(用新算的 \(q\) 更新 \(p\) ):
矩陣 \(M = \begin{pmatrix} 1 & \Delta t \\ -\Delta t & 1-\Delta t^2 \end{pmatrix}\) , \(\det M = 1\) —— 面積守恆(辛)!且可證明此方法精確求解另一個哈密頓系統
辛積分器 = 精確求解一個「鄰近」的哈密頓系統——能量 \(\tilde H\) 精確守恆,故 \(H\) 只振盪不漂移。
偵查線索 3:Ruth 的三階構造與分裂法#
Ruth 把可分離哈密頓 \(H = T(p) + V(q)\) 的每一步拆成「踢–漂–踢」的組合:
( \(A_T, A_V\) 分別是 \(T\) 、 \(V\) 生成的流,各自精確可解。) 用 BCH 展開(Baker–Campbell–Hausdorff)匹配 \(\dot z = J\nabla H\) 到三階,解出係數 \(c_i, d_i\) 。 分裂法 + BCH 展開 = 任意階辛積分器的構造機器。
對照表:數值方法的長期行為#
| 方法 | 單步精度 | 長期能量 | 相空間結構 |
|---|---|---|---|
| 顯式 Euler | 一階 | 指數漂移 | 破壞 |
| RK4 | 四階 | 緩慢漂移 | 破壞 |
| 半隱式 Euler(辛) | 一階 | 振盪不漂移 | 保留(微形變) |
| Ruth 三階(辛) | 三階 | 振盪不漂移 | 保留 |
Python 驗證:Euler vs 半隱式 Euler 的長期能量#
import numpy as np
dt, N = 0.05, 100000
q = p = 1.0
E_euler = [0.5*(q*q + p*p)]
qe, pe = q, p
for _ in range(N): # 顯式 Euler(不辛)
qe, pe = qe + dt*pe, pe - dt*qe
E_euler.append(0.5*(qe*qe + pe*pe))
E_simpl = [0.5*(q*q + p*p)]
qs, ps = q, p
for _ in range(N): # 半隱式 Euler(辛)
qs = qs + dt*ps
ps = ps - dt*qs
E_simpl.append(0.5*(qs*qs + ps*ps))
print(f"Euler 漂移: {E_euler[-1]:.3e}(爆炸)") # >> 1e10
print(f"辛法振盪: {min(E_simpl):.4f} ~ {max(E_simpl):.4f}") # 恆定在 1.0 附近
結案#
- 「數值精度 ≠ 數值保真」的教訓確立:長期模擬必須保辛。
- 1988 年 Forest–Ruth 四階方法普及,太陽系億年級模擬成為可能(見 1988-幾何數值積分.md)。
- 連鎖反應:分子動力學(Verlet 算法 1967 年其實就是辛的,遲至 1980s 才被認出)、加速器束流物理、數值相對論——幾何數值積分成為獨立學科。