28 #ifndef CProbabilityDensityFunction_H
29 #define CProbabilityDensityFunction_H
36 namespace poses {
class CPose3D; }
40 using namespace mrpt::math;
49 template <
class TDATA,
size_t STATE_LEN>
53 static const size_t state_length = STATE_LEN;
59 virtual void getMean(TDATA &mean_point)
const = 0;
72 this->getCovarianceAndMean(C,mean_point);
79 inline TDATA getMeanVal()
const
92 this->getCovarianceDynAndMean(cov,p);
101 this->getCovarianceAndMean(cov,p);
111 this->getCovarianceAndMean(cov,p);
124 this->getCovarianceAndMean(cov,p);
134 virtual void drawSingleSample( TDATA &outPart )
const = 0;
139 virtual void drawManySamples(
size_t N, std::vector<vector_double> & outSamples )
const
141 outSamples.resize(N);
143 for (
size_t i=0;i<N;i++)
145 this->drawSingleSample(pnt);
146 pnt.getAsVector(outSamples[i]);
158 inline double getCovarianceEntropy()
const
160 static const double ln_2PI= 1.8378770664093454835606594728112;
161 return 0.5*( STATE_LEN + STATE_LEN * ln_2PI + log( std::max(getCovariance().
det(), std::numeric_limits<double>::epsilon() ) ) );