Stratonovich Development
Stochastic development (Eells-Elworthy-Malliavin) constructs Brownian motion on a Riemannian manifold by driving its orthonormal frame bundle with Euclidean Brownian motion. The projection to is a diffusion with the Laplace-Beltrami generator .
The SDE
On the frame bundle , the Stratonovich SDE is
where is the horizontal lift of the -th frame vector and the driving is standard Brownian motion. The base-point projection is Brownian motion on .
Integrator
One Stratonovich-Euler step:
- Form horizontal velocity .
- Advance the base point: .
- Parallel-transport the frame: , then Gram-Schmidt re-orthonormalise.
Because the frame-coordinate drift is zero, no Stratonovich correction term is needed — the discretisation error is purely in the base-point projection.
API
use cartan_stochastic::{random_frame_at, stochastic_development};
let frame = random_frame_at(&m, &p0, &mut rng)?;
let result = stochastic_development(
&m, &p0, frame,
/* n_steps = */ 200,
/* dt = */ 0.001,
&mut rng,
/* gram-schmidt tol = */ 1e-10,
)?;
// result.path: Vec<M::Point> of length n_steps + 1
// result.final_frame: the terminal orthonormal frameTrait requirements on : any manifold implementing Manifold + Retraction + VectorTransport gets this machinery via the blanket StratonovichDevelopment marker trait. Tested against the sphere heat kernel and Bures-Wasserstein SPD.
Empirical validation
For Brownian motion on starting at the north pole, the zonal harmonic gives a closed-form expectation
cartan-stochastic matches this to Monte Carlo precision at 400 paths:
| Horizon | Closed form | Empirical (N=400) |
|---|---|---|
| within |
Performance
Per-step cost on the native Rust path (median, warmup-amortised, f64):
| Manifold | Dim | horizontal_velocity | stratonovich_step |
|---|---|---|---|
| Sphere | 2 | 20 ns | 190 ns |
| Sphere | 5 | 20 ns | 501 ns |
| Sphere | 10 | 20 ns | 1.66 µs |
| Sphere | 25 | 60 ns | 9.45 µs |
| Sphere | 50 | 250 ns | 41.2 µs |
| SPD(2) | 2 | — | 4.11 µs |
| SPD(3) | 3 | — | 24.9 µs |
| SPD(5) | 5 | — | 202 µs |
The horizontal-lift primitive is essentially free below ; the step cost is dominated by the parallel-transport and Gram-Schmidt reorthonormalisation at the end of each step.