M2.1 From One Leaf to a Cloud: Flow Maps and Pushforwards
Builds on2 notes
A thousand leaves
M2.0 followed one leaf: the velocity field and initial position determine its endpoint.
Now scatter a thousand leaves beneath a bridge, densely near the center and sparsely near the edges. Where will they concentrate a minute later?
All follow the same field, but faster flow stretches the cloud and converging flow compresses it. Can the map from starting points to endpoints determine the transported density? We now follow a distribution.
DiscussionQ1
What mathematical objects describe the initial and final clouds? How do they relate to one endpoint ?
Show the reasoning
The thousand positions are samples. Their initial density describes the probability of landing at each location.
The initial position is a random variable ; the leaves are independent samples.
Each subsequent trajectory is deterministic. Package the ODE solution into a function:
The flow map records the endpoint for every starting point, rather than a single trajectory.
The final cloud has the law of . Previously we evaluated one input; now we transport the whole distribution. This pushforward is written .
Deforming jelly
Imagine the cloud as soft jelly. Faster flow ahead stretches it, spreading the same leaves over more area. Converging flow compresses it and raises density.
Under a regular, uniquely solvable flow, distinct starting points cannot merge, and continuous dependence prevents tearing. Each transported piece keeps its probability mass while its volume changes. Density changes inversely with local volume.
Each small piece retains its points; the Jacobian measures its volume change.
flow map、pushforward、change of variables
Flow-map properties. Assume existence and uniqueness, with solutions defined over the required forward and backward intervals. From M2.0:
- . Continuous dependence bounds endpoint differences by times the initial difference; see Grönwall’s inequality in M2.3.
- Invertibility: if , backward uniqueness gives . The inverse follows the reversed field for time units. With sufficient smoothness, the map and inverse are differentiable: a diffeomorphism.
- For a time-independent field, .
Pushforward. For a measurable map , the law is obtained by sampling and applying . For every measurable region :
The probability of arriving in equals the probability of starting in its preimage. Invertibility is unnecessary.
Density by change of variables. Suppose has a density and is a diffeomorphism with nonzero Jacobian determinant. Then:
For a small box near , its preimage near has volume approximately . Equal probabilities give . Cancel the volume and take the local limit.
The determinant is precisely the jelly’s local volume expansion factor.
DetailsA complete example: xdot = −x with a standard Gaussian start
The flow is Φ_t(x)=e^(−t)x, with inverse e^t y and inverse derivative e^t. Thus p_t(y)=p₀(e^t y)e^t=(2π)^(−1/2)e^t exp(−e^(2t)y²/2), the density of N(0,e^(−2t)). The cloud narrows toward zero. The factor e^t compensates for the shrinking width, keeping total probability one. The next note derives the same answer from a density equation.
What the intuition leaves out
Volume does not determine shape: a determinant-one shear changes a square into a parallelogram. For smooth flows, preserves volume. In general, each material piece retains mass while its density varies inversely with volume.
A pushforward only requires a chosen measurable map. The single-inverse density formula needs stronger assumptions. A many-to-one map needs another treatment; collapsing positive mass to a point can produce an atom without an ordinary density. Nonunique ODEs require selecting a solution before defining a flow map.
Count leaves or evaluate a formula?
For a fixed region, the sampled proportion from independent particles has error typically . Histograms also introduce binning error. Change of variables avoids sampling error, but numerical inverse flows and Jacobians can still introduce error.
import numpy as np
t, N = 1.0, 1000
x0 = np.random.randn(N)
xt = np.exp(-t) * x0 # Exact flow for xdot = -x
ys = np.linspace(-2, 2, 200)
p_formula = np.exp(t) * np.exp(-(np.exp(t)*ys)**2/2) / np.sqrt(2*np.pi)
hist, edges = np.histogram(xt, bins=40, range=(-2, 2), density=True)
# Compare the histogram with p_formula; reduce N to 100 to see sampling noise.
Check your understanding
References
- Hirsch, M. W., Smale, S., Devaney, R. L. Differential Equations, Dynamical Systems, and an Introduction to Chaos. Academic Press, 3rd ed., 2013.
- Villani, C. Topics in Optimal Transportation. AMS Graduate Studies in Mathematics 58, 2003.
- Grimmett, G., Stirzaker, D. Probability and Random Processes. Oxford University Press, 3rd ed., 2001.