43 #include <Eigen/Cholesky>
45 #include <rsl/random.hpp>
61 template <
typename Derived1,
typename Derived2>
62 MultivariateGaussian(
const Eigen::MatrixBase<Derived1>& mean,
const Eigen::MatrixBase<Derived2>& covariance);
69 template <
typename Derived>
70 void sample(Eigen::MatrixBase<Derived>& output,
bool use_covariance =
true);
73 Eigen::VectorXd mean_;
74 Eigen::MatrixXd covariance_;
75 Eigen::MatrixXd covariance_cholesky_;
78 std::normal_distribution<double> normal_dist_;
83 template <
typename Derived1,
typename Derived2>
85 const Eigen::MatrixBase<Derived2>& covariance)
86 : mean_(mean), covariance_(covariance), covariance_cholesky_(covariance_.llt().matrixL()), normal_dist_(0.0, 1.0)
91 template <
typename Derived>
94 for (
int i = 0; i < size_; ++i)
95 output(i) = normal_dist_(rsl::rng());
99 output = mean_ + covariance_cholesky_ * output;
103 output = mean_ + output;
Generates samples from a multivariate gaussian distribution.
void sample(Eigen::MatrixBase< Derived > &output, bool use_covariance=true)
generates random values using a normal distribution.
MultivariateGaussian(const Eigen::MatrixBase< Derived1 > &mean, const Eigen::MatrixBase< Derived2 > &covariance)
std::shared_ptr< MultivariateGaussian > MultivariateGaussianPtr