pub struct MeasureState<F: SemiflowFloat, const D: usize> { /* private fields */ }Expand description
Sparse signed-measure state on M(ℝ^D) for adjoint Fokker-Planck Chernoff.
Representation: finite weighted-Dirac sum + optional Gaussian background.
Lemma A.1 pushes each Dirac at x to four children x±h, x+k, x with
weights (1/4, 1/4, 1/2, τc). The 4^n blow-up is resolved by gridless.rs.
Implementations§
Source§impl<F: SemiflowFloat, const D: usize> MeasureState<F, D>
impl<F: SemiflowFloat, const D: usize> MeasureState<F, D>
Sourcepub fn dirac(position: [F; D], weight: F) -> Self
pub fn dirac(position: [F; D], weight: F) -> Self
Construct a single Dirac δ_position with signed weight.
Sourcepub fn gaussian(
mean: [F; D],
variance: F,
weight: F,
) -> Result<Self, SemiflowError>
pub fn gaussian( mean: [F; D], variance: F, weight: F, ) -> Result<Self, SemiflowError>
Construct a Gaussian-smoothed measure (isotropic variance).
§Errors
SemiflowError::DomainViolation if variance ≤ 0 or weight non-finite.
Sourcepub fn from_particles(particles: &[([F; D], F)]) -> Self
pub fn from_particles(particles: &[([F; D], F)]) -> Self
Construct from (position, weight) pairs; no validity checks.
Sourcepub fn total_variation(&self) -> F
pub fn total_variation(&self) -> F
Total-variation norm ‖ρ‖_TV — rate modulator in Theorem A.2 (§38.4).
Sourcepub fn second_moment(&self) -> F
pub fn second_moment(&self) -> F
Second moment ⟨x², ρ⟩ — tightness monitor per Lemma A.3 (§38.5).
Sourcepub fn pair<G: Fn(&[F; D]) -> F>(&self, f: G) -> F
pub fn pair<G: Fn(&[F; D]) -> F>(&self, f: G) -> F
Dual pairing ⟨f, ρ⟩ for a test function f ∈ C_b.
Gaussians use point evaluation at the mean.
Sourcepub fn first_moment(&self) -> [F; D]
pub fn first_moment(&self) -> [F; D]
Mass-weighted centre of mass (first moment), per axis (§38.12).
Returns E[x_d] = (Σ_diracs w·pos[d] + Σ_gauss w·mean[d]) / mass for
each axis d, where mass = total_variation().
If mass = 0, returns all-zeros (undefined mean for the zero measure).
Sourcepub fn variance(&self) -> F
pub fn variance(&self) -> F
Total scalar variance Var = E[|x|²] − |E[x]|² (§38.12).
Uses mass-normalised second moment: E[|x|²] = second_moment() / mass.
Returns 0 if mass = 0.
Sourcepub fn variance_per_axis(&self) -> [F; D]
pub fn variance_per_axis(&self) -> [F; D]
Per-axis variance Var_d = E[x_d²] − (E[x_d])² (§38.12).
Returns all-zeros if mass = 0.
Trait Implementations§
Source§impl<F: Clone + SemiflowFloat, const D: usize> Clone for MeasureState<F, D>
impl<F: Clone + SemiflowFloat, const D: usize> Clone for MeasureState<F, D>
Source§impl<F: SemiflowFloat, const D: usize> State<F> for MeasureState<F, D>
State<F> impl for MeasureState<F, D> (dynamic-length signed measure).
impl<F: SemiflowFloat, const D: usize> State<F> for MeasureState<F, D>
State<F> impl for MeasureState<F, D> (dynamic-length signed measure).
len() = atom count (grows after axpy_into). axpy_into APPENDS atoms;
norm_sup() returns ‖ρ‖_TV. Fixed-length invariants from GridFn1D
do NOT apply here.