EmrysFilter 0.1.0
State estimation utilities in C++23 using Eigen
Loading...
Searching...
No Matches
Emrys::Axes Concept Reference

Axes: a way of taking a root \( S \) of a covariance \( P \), \( S S^T = P \), whose columns carry a sigma-point rule's unit points into the input (decisions.md [sigma-point-axes]). More...

#include <EmrysFilter/Distributions/Roots.h>

Concept definition

template<typename T>
concept Axes = requires {
{ std::bool_constant<T::canFail>{} } -> std::convertible_to<bool>;
} && requires(T const & axes, Eigen::Matrix3d const & cov) {
{ axes.root(cov) } -> std::same_as<internal::RootResult<T::canFail, Eigen::Matrix3d>>;
}
Axes: a way of taking a root of a covariance , , whose columns carry a sigma-point rule's unit point...
Definition Roots.h:300

Detailed Description

Axes: a way of taking a root \( S \) of a covariance \( P \), \( S S^T = P \), whose columns carry a sigma-point rule's unit points into the input (decisions.md [sigma-point-axes]).

Every root is \( L Q \), with \( L \) the lower Cholesky factor and \( Q \) orthogonal, so the axes are the choice of \( Q \), and a rule's moments of a function it does not integrate exactly depend on it.

roots::cholesky(), roots::pivoted(), roots::principal(), roots::symmetric(), and roots::along() are the library's, and a list of fallbacks after axes that can fail is axes too. Axes of the user's own are any type with the members below (decisions.md [user-extension-points]); usage.md, "Writing axes", writes one.

  • static constexpr bool canFail: whether a root can fail to be taken, as a Cholesky factorization fails on a matrix that is not positive definite.
  • root(cov), a const member template taking any square Eigen matrix and reading only its lower triangle: the root, square with cov's rows and its bounds (a fixed or bounded size allocates nothing), or, when canFail, a std::expected of it with a GaussianError.

Optional:

  • rootFromFactor(factor): the same root of \( F F^T \) from a factor \( F \), which may be wide, without forming the covariance, as a square-root form holds its factor. Without it the covariance is formed and given to root().
  • root(cov, sink): the root, calling sink with a report of what was done, such as the pivots clamped, of the type Report<Scalar> the axes name; roots::squareRootWithReport() collects it. Without it the axes report roots::NoReport.