41 #include <eigen3/Eigen/Cholesky>
42 #include <eigen3/Eigen/Core>
43 #include <rsl/random.hpp>
53 template <
typename Derived1,
typename Derived2>
54 MultivariateGaussian(
const Eigen::MatrixBase<Derived1>& mean,
const Eigen::MatrixBase<Derived2>& covariance);
56 template <
typename Derived>
57 void sample(Eigen::MatrixBase<Derived>& output);
60 Eigen::VectorXd mean_;
61 Eigen::MatrixXd covariance_;
62 Eigen::MatrixXd covariance_cholesky_;
65 std::normal_distribution<double> gaussian_;
70 template <
typename Derived1,
typename Derived2>
72 const Eigen::MatrixBase<Derived2>& covariance)
73 : mean_(mean), covariance_(covariance), covariance_cholesky_(covariance_.llt().matrixL()), gaussian_(0.0, 1.0)
78 template <
typename Derived>
81 for (
int i = 0; i < size_; ++i)
82 output(i) = gaussian_(rsl::rng());
83 output = mean_ + covariance_cholesky_ * output;
Generates samples from a multivariate gaussian distribution.
void sample(Eigen::MatrixBase< Derived > &output)
MultivariateGaussian(const Eigen::MatrixBase< Derived1 > &mean, const Eigen::MatrixBase< Derived2 > &covariance)