The innovation of an update: the residual \( r \) of the observation from the predicted output, normalized in the output space, and its covariance \( S \), from which the update's statistics follow (decisions.md [innovation-statistics]).
More...
|
|
template<MatrixExpression Residual, MatrixExpression Cov> |
| | Innovation (Residual &&residual, Cov &&cov, std::optional< internal::InnovationStatistics< Scalar > > statistics=std::nullopt) |
| | The innovation with residual residual and covariance cov, moving either one passed as an rvalue of the stored type, and the statistics statistics if the caller has them.
|
| template<MatrixExpression Residual, typename MakeCov, typename Condition> |
| | Innovation (internal::InnovationInPlace, Residual &&residual, MakeCov const &makeCov, Condition const &condition) |
| | The innovation with residual residual and the covariance makeCov returns, made where the innovation keeps it, and the statistics condition returns when called with the two as kept: an update conditions on the innovation it returns without copying \( S \) (decisions.md [borrowed-intermediates]), and may replace \( S \) there with the matrix it repaired it to (decisions.md [innovation-cholesky]).
|
| VectorType const & | residual () const |
| MatrixType const & | covarianceLower () const |
| Eigen::Index | differenceDimension () const |
| Scalar | nis () const |
| Scalar | logLikelihood () const |
template<typename Space, typename Scalar = double>
class Emrys::Innovation< Space, Scalar >
The innovation of an update: the residual \( r \) of the observation from the predicted output, normalized in the output space, and its covariance \( S \), from which the update's statistics follow (decisions.md [innovation-statistics]).
nis() and logLikelihood() are computed from a Cholesky factorization of \( S \) the first time either is asked for, and kept, unless the update that made the innovation had them already from the factorization that gave its gain, as every update that weights branches by them, or whose filter's policy reads them, does (decisions.md [innovation-statistics]). \( S \) must be positive definite, as the covariance of every innovation an update returns is (decisions.md [innovation-cholesky]). Only the lower triangle of \( S \) is read.
Keeping the statistics writes through const, so the first call to either function is not safe on one innovation from two threads at once. To share an innovation between threads, call nis() or logLikelihood() on it once first; after that, both only read.
- Template Parameters
-
| Space | the output's space, whose differences the residual is in |
template<typename Space, typename Scalar = double>
template<MatrixExpression Residual, typename MakeCov, typename Condition>
| Emrys::Innovation< Space, Scalar >::Innovation |
( |
internal::InnovationInPlace | , |
|
|
Residual && | residual, |
|
|
MakeCov const & | makeCov, |
|
|
Condition const & | condition ) |
|
inline |
The innovation with residual residual and the covariance makeCov returns, made where the innovation keeps it, and the statistics condition returns when called with the two as kept: an update conditions on the innovation it returns without copying \( S \) (decisions.md [borrowed-intermediates]), and may replace \( S \) there with the matrix it repaired it to (decisions.md [innovation-cholesky]).
For the library's updates; condition returns std::optional<InnovationStatistics<Scalar>>.