Virtually every physics simulation boils down to integrating a system of ordinary differential equations. The choice of numerical method determines accuracy, stability, and computational cost — and the wrong choice on a stiff system (one where some quantities change much faster than others, forcing tiny steps to keep the fast part stable) can mean results that are orders of magnitude off or outright diverging. This article surveys the key methods: from the textbook Euler method through the classical RK4, to adaptive Dormand–Prince, multistep Adams–Bashforth, and geometry-preserving symplectic integrators.
1. The Initial Value Problem
We seek to solve:
where y ∈ ℝⁿ and f: ℝ × ℝⁿ → ℝⁿ. All classical physical systems (Newton's second law, Lorenz equations, chemical kinetics) fit this form after reducing higher-order equations to first-order systems.
A numerical integrator approximates y(t) at a sequence of discrete time points tₖ = t₀ + k·h (fixed step) or at adaptively chosen tₖ. The core challenge is balancing three competing demands: accuracy (local truncation error per step), stability (error doesn't grow unboundedly), and cost (function evaluations per step).
2. Euler Method (Order 1)
Local truncation error (LTE): O(h²). Global error: O(h). The simplest method and almost never used in practice — it requires extremely small h for acceptable accuracy. Explicit Euler is also A-unstable: for the test equation dy/dt = λy with Re(λ) < 0, the method requires h < 2/|λ| to avoid growing oscillations, which is very restrictive for stiff problems.
Symplectic Euler — a simple improvement
For Hamiltonian systems (q position, p momentum), the
symplectic Euler method updates p first, then uses the new p
to update q:
pₙ₊₁ = pₙ + h·f(qₙ)
qₙ₊₁ = qₙ + h·pₙ₊₁/m
Despite being only first-order accurate, it
preserves the symplectic structure (area in phase
space), so energy error remains bounded over exponentially long times
— unlike the Runge-Kutta methods which slowly accumulate energy drift.
3. Classical Runge–Kutta (RK4, Order 4)
The "gold standard" workhorse of physics simulation:
LTE: O(h⁵). Global error: O(h⁴). Four function evaluations per step. The error constant is very small: for the harmonic oscillator the error per unit time is roughly 1/180 · h⁴ · max|y⁽⁵⁾|. For most non-stiff problems with smooth solutions, RK4 with h ≈ 0.01–0.1 is highly accurate. Stability region in the complex h·λ plane is a disc-like region covering most of the left half-plane up to |hλ| ≈ 2.8.
// RK4 in JavaScript
function rk4(f, t, y, h) {
const k1 = f(t, y);
const k2 = f(t + h/2, y.map((v, i) => v + h/2 * k1[i]));
const k3 = f(t + h/2, y.map((v, i) => v + h/2 * k2[i]));
const k4 = f(t + h, y.map((v, i) => v + h * k3[i]));
return y.map((v, i) => v + h/6 * (k1[i] + 2*k2[i] + 2*k3[i] + k4[i]));
}
4. Adaptive Step-Size Control: Dormand–Prince RK45
Fixed-step RK4 wastes function evaluations in smooth regions and steps too coarsely in rapidly varying ones. Adaptive methods control the step size to keep estimated local error within a tolerance (rtol, atol).
The Dormand–Prince method (Matlab's ode45,
SciPy's RK45) uses a pair of embedded RK formulas sharing
the same 6 stages (+ one FSAL "first same as last" reuse): one 5th-order
and one 4th-order. Their difference estimates the local error without
extra cost.
The FSAL trick reuses k₇ from step n as k₁ of step n+1, reducing cost from 6 to 5 evaluations per accepted step. Most practical simulations use rtol = 1e-6, atol = 1e-9 as defaults for scientific accuracy.
| Method | Order | Evals/step | Adaptive? | Best use |
|---|---|---|---|---|
| Euler | 1 | 1 | No | Teaching only |
| Heun (RK2) | 2 | 2 | No | Very coarse approximations |
| RK4 (classical) | 4 | 4 | No | Non-stiff, known smooth ODE |
| Dormand–Prince RK45 | 4(5) | 6 (5 FSAL) | Yes | General non-stiff default |
| Cash–Karp RK45 | 4(5) | 6 | Yes | Smooth non-stiff with tight tol |
| DOP853 | 8(5,3) | 13 | Yes | High-precision non-stiff |
| Verlet / leapfrog | 2 | 1 | No | Hamiltonian, N-body, MD |
| Störmer–Verlet | 2 | 1 | No | Symplectic, energy conservation |
5. Multistep Methods: Adams–Bashforth & Adams–Moulton
Single-step methods (Runge–Kutta) discard all previously computed function values after each step. Multistep methods reuse the last k function evaluations, achieving high order with just one or two new evaluations per step.
The explicit Adams–Bashforth p-step formula (AB-p):
AB-4 (4-step) is order 4 with only 1 new evaluation per
step (vs 4 for RK4). Implicit Adams–Moulton (AM-p)
achieves order p+1 with p steps. The combination explicit predictor +
implicit corrector is the PECE (Predict–Evaluate–Correct–Evaluate)
scheme used in Matlab's ode113.
Limitation: multistep methods require a startup procedure (use RK4 for the first k steps) and cannot easily change step size (require restarting or interpolation).
6. Stiff Systems and Implicit Methods
A system is stiff when the largest eigenvalue of the Jacobian ∂f/∂y has magnitude much larger than the inverse of the time scale of interest: stiffness ratio S = max|Re(λᵢ)| · T ≫ 1.
Examples: chemical kinetics with fast/slow reactions (S can reach 10¹⁵), RC circuit with widely separated time constants, diffusion equations after spatial discretisation (eigenvalues ∝ −1/h²).
A-stability and L-stability
An integrator is A-stable if for all λ with Re(λ)≤0,
|R(hλ)| ≤ 1 for all h>0 — the amplification factor never exceeds 1.
Explicit RK methods are not A-stable (their stability regions
in the left half-plane are bounded). Implicit methods can be
A-stable.
L-stability (stronger): additionally R(∞)=0, so stiff
components decay immediately. Backward-Euler (order 1), Trapezoidal
(order 2, A-stable but not L-stable), SDIRK methods, and Rosenbrock
methods provide A/L-stable integration.
For stiff systems, the implicit Backward Euler scheme
requires solving a nonlinear system at each step (Newton iteration), but
allows arbitrarily large h without instability. The
BDF-k (Backward Differentiation Formula) methods (Gear
methods), used in MATLAB's ode15s, achieve order up to 6
while remaining stiffly stable.
7. Symplectic Integrators for Hamiltonian Systems
For conservative mechanical systems with Hamiltonian H = T(p) + V(q), Runge–Kutta methods introduce a slow secular energy drift even at high order. A symplectic integrator preserves the symplectic 2-form ω = Σ dqᵢ ∧ dpᵢ exactly, which in practice means:
- Energy error is bounded (oscillatory) not drifting
- The modified Hamiltonian H̃ = H + O(hᵖ) is exactly conserved
- Ideal for N-body gravity, molecular dynamics, and long-term orbital mechanics
The Verlet/leapfrog integrator is 2nd-order symplectic:
Higher-order symplectic methods (Yoshida 4th-order, Ruth–Forest 4th-order) apply the Verlet map with cleverly scaled sub-steps. The price: no adaptive step size — the step must stay fixed for symplecticity to hold.
8. Interactive: Compare Methods on the Damped Oscillator
The damped harmonic oscillator ÿ + 2γẏ + ω₀²y = 0 has exact solution y(t) = e^{−γt}·cos(ωd·t) where ωd = √(ω₀²−γ²). Adjust h (step size) and γ (damping) to see how each method tracks the true solution. Large h reveals how Euler diverges while RK4 stays accurate. The absolute energy error over time is shown in the lower panel.
Exact
Numerical
Energy error
(scaled)
Verlet with γ=0 conserves exact energy; all explicit RK methods
accumulate energy drift proportional to h^order.