EmrysFilter 0.1.0
State estimation utilities in C++23 using Eigen
Loading...
Searching...
No Matches
Emrys::methods::GaussHermite< Order > Struct Template Reference

Gauss-Hermite method: the product rule of Order points per coordinate over the joint input space of dimension \( L \), \( \mathrm{Order}^L \) points in the coordinates of a root of the joint covariance. More...

#include <EmrysFilter/Models/Methods.h>

Static Public Member Functions

static constexpr Eigen::Index pointCount (Eigen::Index n)
template<typename Points, typename Weights>
static Eigen::Index unitPoints (Eigen::Index n, Points &points, Weights &weights)
 Fills points, \( n \times \mathrm{Order}^n \), with every combination of the one-dimensional points of internal::hermiteRule(), the first coordinate varying fastest, and weights with the product of each point's coordinates' weights, over \( n > 0 \) coordinates; asserts that the points are within MaxPointCount.

Static Public Attributes

static constexpr int PointsPerCoordinate = Order
 Order

Detailed Description

template<int Order = 3>
struct Emrys::methods::GaussHermite< Order >

Gauss-Hermite method: the product rule of Order points per coordinate over the joint input space of dimension \( L \), \( \mathrm{Order}^L \) points in the coordinates of a root of the joint covariance.

Each coordinate takes the roots of the probabilists' Hermite polynomial of degree Order, and a point's weight is the product of its coordinates' weights. Exact for polynomials of degree up to \( 2 \, \mathrm{Order} - 1 \) in each coordinate of a Gaussian input. The count grows exponentially in \( L \), so the method is for small inputs, such as the coordinates a model's affineIn() leaves nonlinear, and a joint input of more than MaxPointCount points is refused: at compile time where its size is fixed, by an assertion otherwise.

The Gauss-Hermite Kalman filter of Ito and Xiong (2000) as Särkkä (2013), algorithms 6.5 and 6.6, give it: the one-dimensional points as the roots of \( H_p \), computed as that book advises as the eigenvalues of the symmetric tridiagonal matrix of the recursion (6.14), with \( \sqrt{k} \) beside the diagonal, and the weights by equation (6.17), \( W_i = p! / (p^2 H_{p-1}(\xi_i)^2) \). The output mean is a tangent-space mean about the output of the point of greatest weight, the center when Order is odd (decisions.md [sigma-point-sets]).

Template Parameters
Orderthe points per coordinate, at least 1; 3 is exact for a quadratic function's mean and covariance

Member Function Documentation

◆ pointCount()

template<int Order = 3>
constexpr Eigen::Index Emrys::methods::GaussHermite< Order >::pointCount ( Eigen::Index n)
inlinestaticnodiscardconstexpr
Returns
the points over n coordinates, \( \mathrm{Order}^n \), or one more than MaxPointCount once past it, so that the count never overflows

◆ unitPoints()

template<int Order = 3>
template<typename Points, typename Weights>
Eigen::Index Emrys::methods::GaussHermite< Order >::unitPoints ( Eigen::Index n,
Points & points,
Weights & weights )
inlinestatic

Fills points, \( n \times \mathrm{Order}^n \), with every combination of the one-dimensional points of internal::hermiteRule(), the first coordinate varying fastest, and weights with the product of each point's coordinates' weights, over \( n > 0 \) coordinates; asserts that the points are within MaxPointCount.

Returns
the point the output mean is taken about: the one of greatest weight, the first of any tie

The documentation for this struct was generated from the following file: