數值方法入門:以單擺為例理解 Euler、RK2(midpoint)、RK4(classical)

關鍵信息密度高、一步到位。你之後回看,應該可以即刻上手。

0. 問題背景與符號

考慮常微分方程(ODE)初值問題:

y˙=f(t,y),y(t0)=y0,

f 太複雜(或無解析解)時,用數值法由 tntn+1=tn+h 逐步積分近似 yn+1

1. 從 Taylor 展開到 Euler/RK

以 Taylor 展開:

y(t+h)=y(t)+hf(t,y)+h22f(t,y)+O(h3).

2. 單擺(Pendulum)作為非線性測試牀

模型(無阻尼)

θ¨+gLsinθ=0y=[θω], f(y)=[ωgLsinθ].

2.1 矩陣(向量)更新式(Euler/RK2/RK4)

Euler

yn+1(Euler)=[θn+hωnωnghLsinθn]

RK2(Midpoint)

yn+1(RK2)=[θn+hωngh22LsinθnωnghLsin(θn+hωn2)]

RK4(Classical) k1,,k4矩陣式寫法:

k1=[ωngLsinθn],k2=[ωn+h2k1,ωgLsin(θn+h2k1,θ)],k3=[ωn+h2k2,ωgLsin(θn+h2k2,θ)],k4=[ωn+hk3,ωgLsin(θn+hk3,θ)],

2.2 真解(作對照)

單擺精確解可用 Jacobi 橢圓函數寫成(中大幅角時如此);小角近似 sinθθ 才退化為簡諧 θ(t)θ0cos(g/Lt)

pendulum_comparison

由上圖可見,如果h的值不夠細,即計算精度不夠高,在Euler算法上會嚴重偏移,但在RK4上還保持良好。

3. Gravity ODE:何時需要 RK?何時不需要?

恆定重力: x˙=v, v˙=a=(0,0,g) 解析解:

x(t)=x0+v0t+12at2,v(t)=v0+at.

→ 這時 Euler 有 O(h) 誤差RK2 已精確RK4/Adaptive RK 沒必要 需要 RK 的情形:

4. 輕量可重用工具:固定步長 Euler/RK2/RK4(Python)

我幫你寫咗通用整合器模組(最小但實用):

4.1 範例 A:恆定重力(6 維)

4.2 範例 B:單擺(2 維)

想要事件偵測(撞地、過零交叉)、能量監控、或自動步長?請看下一節 SciPy。

5. 現成高階解算器:SciPy solve_ivp(自動步長/誤差控制)

如可用 SciPy,建議一般專案直接用 solve_ivp

方法選擇指引:

Gravity 的建議


6. 常見坑位 Checklist

附:可直接貼入你筆記的 SymPy 檢核程式(等價驗證&輸出 LaTeX)