16 #ifndef OPENKALMAN_RLSTRANSFORM_HPP 17 #define OPENKALMAN_RLSTRANSFORM_HPP 28 template<
typename Scalar =
double>
40 using Base::operator();
52 (coordinates::compares_with<
typename DistributionTraits<InputDist>::StaticDescriptor,
53 typename DistributionTraits<NoiseDists>::StaticDescriptor>and ...)
55 template<
typename InputDist,
typename ... NoiseDists,
56 std::enable_if_t<(distribution<InputDist> and ... and distribution<NoiseDists>) and
57 (coordinates::compares_with<
typename DistributionTraits<InputDist>::StaticDescriptor,
58 typename DistributionTraits<NoiseDists>::StaticDescriptor>and ...),
int> = 0>
60 auto operator()(
const InputDist& x,
const NoiseDists& ...ns)
const 63 return make_self_contained((scaled_x + ... + ns));
78 (coordinates::compares_with<
typename DistributionTraits<InputDist>::StaticDescriptor,
79 typename DistributionTraits<NoiseDists>::StaticDescriptor> and ...)
81 template<
typename InputDist,
typename ... NoiseDists,
82 std::enable_if_t<(distribution<InputDist> and ... and distribution<NoiseDists>) and
83 (coordinates::compares_with<
typename DistributionTraits<InputDist>::StaticDescriptor,
84 typename DistributionTraits<NoiseDists>::StaticDescriptor> and ...),
int> = 0>
88 auto scaled_cov = make_self_contained(covariance_of(x) * inv_lambda);
90 auto y = make_self_contained((scaled_x + ... + ns));
91 auto cross =
Matrix {scaled_cov};
92 return std::tuple {std::move(y), std::move(cross)};
97 const Scalar inv_lambda;
104 #endif //OPENKALMAN_RLSTRANSFORM_HPP
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
constexpr bool distribution
T is a statistical distribution of any kind that is defined in OpenKalman.
Definition: object-types.hpp:193
Definition: basics.hpp:48
A matrix with typed rows and columns.
Definition: forward-class-declarations.hpp:448