37 #ifndef MULTIVARIATE_GAUSSIAN_H_
38 #define MULTIVARIATE_GAUSSIAN_H_
42 #include <Eigen/Cholesky>
43 #include <boost/random/variate_generator.hpp>
44 #include <boost/random/normal_distribution.hpp>
45 #include <boost/random/mersenne_twister.hpp>
58 template <
typename Derived1,
typename Derived2>
59 MultivariateGaussian(
const Eigen::MatrixBase<Derived1>& mean,
const Eigen::MatrixBase<Derived2>& covariance);
61 template <
typename Derived>
62 void sample(Eigen::MatrixBase<Derived>& output);
65 Eigen::VectorXd mean_;
66 Eigen::MatrixXd covariance_;
67 Eigen::MatrixXd covariance_cholesky_;
71 boost::normal_distribution<> normal_dist_;
72 boost::variate_generator<boost::mt19937, boost::normal_distribution<> > gaussian_;
77 template <
typename Derived1,
typename Derived2>
78 MultivariateGaussian::MultivariateGaussian(
const Eigen::MatrixBase<Derived1>& mean,
const Eigen::MatrixBase<Derived2>& covariance):
80 covariance_(covariance),
81 covariance_cholesky_(covariance_.llt().matrixL()),
83 gaussian_(rng_, normal_dist_)
94 template <
typename Derived>
95 void MultivariateGaussian::sample(Eigen::MatrixBase<Derived>& output)
97 for (
int i=0; i<size_; ++i)
98 output(i) = gaussian_();
99 output = mean_ + covariance_cholesky_*output;
Generates samples from a multivariate gaussian distribution.
Definition: chompMultivariateGaussian.hpp:55