pub struct HermiteSegment<Field: Integrable, T = Time> { /* private fields */ }Expand description
Cubic Hermite dense output over one accepted step, built in the field’s Lie algebra rather than on the state itself.
The flat interpolant combines y_{n}, y_{n+1} and the two end rates
affinely. That is meaningless for a group-valued state: the two states are
different group elements and the two rates live in different tangent spaces,
so the combination leaves the manifold (det F_p drifts) exactly the way the
additive march did.
Anchor everything at the left endpoint instead. The step already produced
sigma with reconstruct(base, sigma) = y_{n+1}, and the algebra is a flat
vector space — so the Hermite polynomial is built there,
\sigma(\theta) = h_{10}(\theta)\,\dot\sigma_0 + h_{01}(\theta)\,\sigma
+ h_{11}(\theta)\,\dot\sigma_1
,\qquad
\mathbf{y}(\theta) = \mathrm{reconstruct}(\mathbf{y}_n, \sigma(\theta))with σ(0) = 0 and σ(1) = sigma, so both endpoints are reproduced exactly
and every interior point is an expm of a trace-free element — on the group
by construction. slope_0 is the raw stage-0 slope (dexpinv at zero
displacement is the identity); slope_1 is the endpoint rate pulled back
through Integrable::dexpinv at sigma, both already scaled by the
step. On a super::Flat field reconstruct adds and dexpinv is the
identity, and h_{00} + h_{01} = 1 collapses this to the usual flat formula.
Implementations§
Source§impl<Field, T> HermiteSegment<Field, T>where
Field: Integrable,
impl<Field, T> HermiteSegment<Field, T>where
Field: Integrable,
Sourcepub fn new(
t_0: Quantity<T>,
h: Quantity<T>,
base: Field::Point,
sigma: Field::Increment,
slope_0: Field::Increment,
slope_1: Field::Increment,
) -> Self
pub fn new( t_0: Quantity<T>, h: Quantity<T>, base: Field::Point, sigma: Field::Increment, slope_0: Field::Increment, slope_1: Field::Increment, ) -> Self
A segment of the accepted step [t_0, t_0 + h] from base, the algebra
displacement sigma over it, and the step-scaled algebra rates at its
two ends (slope_1 already pulled back through
Integrable::dexpinv at sigma).