1. 假设
考虑一阶常微分方程(ODE):
x˙(t)=v(x(t),t),x(t0)=x0
假设:
- v(x,t) 在 x,t 上足够光滑(至少三阶连续可导)
- 时间步长为 Δt
2. 真实解的泰勒展开(基准)
对真实解 x(t+Δt) 在 t 点展开:
x(t+Δt)=x(t)+Δtx˙(t)+2Δt2x¨(t)+6Δt3x...(t)+O(Δt4)
一阶导数
x˙(t)=v(x(t),t)
二阶导数
由于 v 同时依赖于 x 和 t,而 x=x(t),使用多变量链式法则:
x¨(t)=dtdv(x(t),t)=vx(x(t),t)x˙(t)+vt(x(t),t)
代入 x˙(t)=v(x(t),t):
x¨(t)=vx(x(t),t)v(x(t),t)+vt(x(t),t)
3. 欧拉法的误差阶(对照)
欧拉法更新公式:
xEuler(t+Δt)=x(t)+Δtv(x(t),t)
局部截断误差
LTEEuler=O(Δt2)
全局误差,步数 N=O(1/Δt),误差累积:
Global ErrorEuler=O(Δt)
4. RK2(中点法)的定义
第一步:中点预测
xmid=x(t)+2Δtv(x(t),t)
tmid=t+2Δt
第二步:中点斜率
vmid=v(xmid,tmid)
最终更新
xRK2(t+Δt)=x(t)+Δtvmid
5. 中点速度的泰勒展开
对 v(x,t) 在点 (x(t),t) 做二阶泰勒展开:
v(xmid,tmid)=v(x(t),t)+vx(x(t),t)(2Δtv(x(t),t))+O(Δt2)+vt(x(t),t)(2Δt)
整理得:
vmid=v+2Δt(vxv+vt)+O(Δt2)
6. RK2 更新公式的展开
代入更新公式:
xRK2(t+Δt)=x(t)+Δtvmid=x(t)+Δtv+2Δt2(vxv+vt)+O(Δt3)
7. 与真实解逐项对比
真实解:
x(t+Δt)=x(t)+Δtv+2Δt2(vxv+vt)+6Δt3x...(t)+O(Δt4)
RK2 数值解:
xRK2(t+Δt)=x(t)+Δtv+2Δt2(vxv+vt)+O(Δt3)
步数 N=O(1/Δt):
Global ErrorRK2=N⋅LTE=O(Δt2)