M3.1 Flow Plus Fluctuations: Stochastic Differential Equations
Builds on2 notes
The same river, now with fluctuations
Return to the river in M2.0. A steady current carries a leaf downstream at 0.5 m/s, while small random fluctuations push it unpredictably.
Where is a leaf released beneath the bridge one minute later?
Drift moves it downstream, but identical starting points can now yield different paths. How can one rule combine these motions? Drift displacement scales as , while Brownian perturbations scale as .
DiscussionQ1
What represents the current and the fluctuations? Is the position after a minute a number or a random variable? How should we modify the ODE?
Show the reasoning
Writing ordinary velocity plus noise is misleading: Brownian paths are not ordinarily differentiable. Use increments instead.
Over a short interval, the ODE gives displacement approximately . Add times the independent Brownian increment :
The infinitesimal notation is
This is a stochastic differential equation (SDE), with drift and diffusion coefficient . Its solution is a random process. Fixing one Brownian realization gives one trajectory; is a random variable at one time, and its marginal law is not the whole process.
A trajectory becomes a fan
For constant and , paths spread around with standard deviation . This is a special case: a restoring drift can prevent variance from increasing indefinitely.
Generally the solution is not an ODE solution plus Brownian motion. Random displacement changes the drift subsequently encountered. Under appropriate integrability, , generally different from .
For constant drift and diffusion, the center translates and the standard deviation grows as .
Read the increments and simulate them
Under appropriate existence, uniqueness, and convergence assumptions, a small step admits the approximation
This Euler–Maruyama approximation is not an exact finite-step equality. The Itô equation is defined by [1,3]. We first interpret its increments; convergence comes later.
Euler–Maruyama. Turn the approximation into an update:
It adds noise to Euler’s method from M2.3 and reduces to Euler when .
Check the scale. For constant , independent noise increments sum to . Their variances add:
The total is independent of . Replacing with gives variance , converging to a different, noiseless model rather than approximating the intended Brownian perturbation.
An exact check. For constant and , summing the increments gives , hence
With , , , and , the mean is 30 m and the standard deviation is m.
DetailsWhat the increment interpretation leaves implicit
Evaluating noise intensity at each step’s start corresponds to the Itô convention. For deterministic time-dependent g, ordinary endpoint choices agree in the limit under suitable regularity. With state-dependent g(x), Itô and Stratonovich conventions differ: in one dimension their drift conversion contains ½g∂ₓg. A properly defined midpoint interpretation yields Stratonovich, rather than merely changing notation. This unit focuses on g=g(t), avoiding that distinction. Rigorous convergence also needs proof; see M3.4 and [4].
Put numbers on the uncertainty
In this example, the mean is 30 m downstream and about 95% of endpoints lie within approximately m. The uncertainty comes from , the square-root law in M3.0.
This model assumes independent Gaussian Brownian increments with variance proportional to elapsed time, and position-independent . Real eddies can have temporal correlation and spatially varying intensity. Those require a different effective model or explicit state-dependent coefficients; the size and direction of the discrepancy must be analyzed rather than assumed.
Simulate the correct and incorrect scales
import numpy as np
rng = np.random.default_rng(0)
def em(f, g, x0, T, h, trials=20000, noise_scale='sqrt'):
x = np.full(trials, x0)
N = int(round(T/h))
for n in range(N):
eps = rng.standard_normal(trials)
step = np.sqrt(h) if noise_scale == 'sqrt' else h
x = x + h*f(x) + g*step*eps
return x
for h in [1.0, 0.1, 0.01]:
ok = em(lambda x: 0.5, 0.3, 0.0, 60.0, h)
bad = em(lambda x: 0.5, 0.3, 0.0, 60.0, h, noise_scale='h')
print(h, round(ok.mean(),2), round(ok.std(),2), '| h-scaled std:', round(bad.std(),3))
# Correct scale: mean near 30 and standard deviation near 2.32 at every h.
Square-root scaling matches the exact Gaussian. With stationary correlated AR(1) increments and fixed , the discrete noise is not independent Brownian noise. A suitable limit can introduce an effective variance factor ; changing correlation time with requires additional analysis.
Check your understanding
References
- Särkkä, S., Solin, A. Applied Stochastic Differential Equations. Cambridge University Press, 2019.
- Higham, D. J. An Algorithmic Introduction to Numerical Simulation of Stochastic Differential Equations. SIAM Review 43(3), 2001.
- Øksendal, B. Stochastic Differential Equations: An Introduction with Applications. Springer, 6th ed., 2003.
- Kloeden, P. E., Platen, E. Numerical Solution of Stochastic Differential Equations. Springer, 1992.