11 #ifndef CONTINUOUSPROPERTYPARTICLEDISTRIBUTION_HPP 12 #define CONTINUOUSPROPERTYPARTICLEDISTRIBUTION_HPP 18 #include <Eigen/Dense> 19 #include "distributions/WeightedParticleDistribution.hpp" 24 template<
template<
int,
typename>
typename ContinuousDistribution,
25 int continuous_dimensions,
26 typename Scalar = double,
27 typename... OtherProperties>
31 eigen_matrix_t<Scalar, continuous_dimensions, 1>,
35 using Mean = eigen_matrix_t<Scalar, continuous_dimensions, 1>;
36 using Covariance = eigen_matrix_t<Scalar, continuous_dimensions, continuous_dimensions>;
40 using Parent::Properties;
43 const auto getDistribution()
const 45 using Acc = std::tuple<Mean, Mean>;
46 auto acc = std::accumulate(
49 Acc {Mean::Zero(), Covariance::Zero()},
50 [](
const Acc& a,
const Properties& p) -> Acc {
51 Mean x = p.template get<0>() * p.template get<1>();
52 return {a.template get<0>() + x, a.template get<1>() + x * x.transpose()};
56 Mean
mean = acc.template get<0>;
57 Covariance
covariance = acc.template get<1> - mean * mean.transpose();
58 return ContinuousDistribution<continuous_dimensions, Scalar>(
GaussianDistribution(mean, covariance));
65 #endif //CONTINUOUSPROPERTYPARTICLEDISTRIBUTION_HPP A meta-header file including all the headers relating to OpenKalman distributions.
A Gaussian distribution, defined in terms of a Mean and a Covariance.
Definition: GaussianDistribution.hpp:42
The root namespace for OpenKalman.
Definition: basics.hpp:34
Definition: WeightedParticleDistribution.hpp:23
constexpr bool covariance
T is a specialization of either Covariance or SquareRootCovariance.
Definition: object-types.hpp:161
Definition: ContinuousPropertyParticleDistribution.hpp:28
constexpr bool mean
Specifies that T is a mean (i.e., is a specialization of the class Mean).
Definition: object-types.hpp:40