EmrysFilter 0.1.0
State estimation utilities in C++23 using Eigen
Loading...
Searching...
No Matches
Transform.h File Reference

Propagating a distribution through a function (decisions.md [method-per-measurement], [prediction-inputs], [affine-coordinates], [returned-jacobians], [iterated-update], [sigma-point-sets], [linearization-reference], [transform-policies]): transform(), which takes a measurement model's policies or a measurement model itself, the withCross() mark on its arguments, and linearizedAbout() for a step linearized about a point or a distribution the caller gives. More...

#include <algorithm>
#include <array>
#include <cmath>
#include <concepts>
#include <cstddef>
#include <expected>
#include <limits>
#include <optional>
#include <tuple>
#include <type_traits>
#include <utility>
#include <Eigen/Cholesky>
#include <Eigen/Eigenvalues>
#include <unsupported/Eigen/AutoDiff>
#include <EmrysFilter/Core/Forwarding.h>
#include <EmrysFilter/Core/Macros.h>
#include <EmrysFilter/Core/Math.h>
#include <EmrysFilter/Core/Multiply.h>
#include <EmrysFilter/Core/Solve.h>
#include <EmrysFilter/Distributions/Gaussian.h>
#include <EmrysFilter/Distributions/SampleSet.h>
#include <EmrysFilter/Distributions/Sampling.h>
#include <EmrysFilter/Models/Batched.h>
#include <EmrysFilter/Models/Condition.h>
#include <EmrysFilter/Models/Linearization.h>
#include <EmrysFilter/Models/MeasurementModel.h>
#include <EmrysFilter/Models/Methods.h>
#include <EmrysFilter/Models/ResolvedReads.h>
#include <EmrysFilter/Models/TransformArgs.h>
#include <EmrysFilter/Spaces/Coordinates.h>
#include <EmrysFilter/Spaces/Indexing.h>
#include <EmrysFilter/Spaces/Reset.h>
#include <EmrysFilter/Spaces/Space.h>
#include <EmrysFilter/Spaces/Subspace.h>
#include <EmrysFilter/Spaces/TagPath.h>

Go to the source code of this file.

Functions

template<UncertainInput Input>
CrossMarked< Input > Emrys::withCross (Input const &input)
 Marks the uncertain input, usually the state, whose cross-covariance with the output transform() also returns (see OutputWithCross).
template<UncertainInput Input>
void Emrys::withCross (Input const &&input)=delete
 withCross() of a temporary is deleted: the mark refers to its input, which would be gone at the end of the full expression, so a mark kept in a variable would dangle.
template<UncertainInput Distribution>
LinearizedAbout< Distribution const & > Emrys::linearizedAbout (Distribution const &distribution)
template<UncertainInput Distribution>
void Emrys::linearizedAbout (Distribution const &&distribution)=delete
 linearizedAbout() of a temporary distribution is deleted, as withCross()'s is: the mark refers to it, and it would be gone at the end of the full expression.
template<typename Derived>
LinearizedAbout< typename Derived::PlainObject > Emrys::linearizedAbout (Eigen::MatrixBase< Derived > const &point)
template<typename Method, typename F, typename... Args>
requires (!MeasurementModel<F> && !internal::isModel<F> && internal::crossCount<Args...> <= 1)
auto Emrys::transform (Method const &method, F const &f, Args const &... args)
template<typename Method, typename Model, typename... Inputs>
requires ((MeasurementModel<Model> || internal::isModel<Model>) && internal::crossCount<Inputs...> <= 1)
auto Emrys::transform (Method const &method, Model const &model, Inputs const &... inputs)

Detailed Description

Propagating a distribution through a function (decisions.md [method-per-measurement], [prediction-inputs], [affine-coordinates], [returned-jacobians], [iterated-update], [sigma-point-sets], [linearization-reference], [transform-policies]): transform(), which takes a measurement model's policies or a measurement model itself, the withCross() mark on its arguments, and linearizedAbout() for a step linearized about a point or a distribution the caller gives.

The internal namespace holds each method's computation of the output's moments and linearization. It includes what it builds on: Linearization.h (what a transform returns), Condition.h (the Kalman update of a marked input), Methods.h (the methods as policies), and TransformArgs.h (the arguments and the joint input). Read ProcessModel.h and Measurement.h next.