4 #include <boost/random/mersenne_twister.hpp>     5 #include <boost/random/normal_distribution.hpp>    10 #include "normal_multivar.h"    17   generator_ = boost::random::mt19937(
seed_);
    18   distribution_ = boost::random::normal_distribution<double>();
    25   generator_ = boost::random::mt19937(
seed_);
    26   distribution_ = boost::random::normal_distribution<double>();
    30     Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>& random_numbers,
    31     const Eigen::VectorXd& means, 
const Eigen::MatrixXd& cov,
    35   Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> lower_cholesky;
    39     lower_cholesky = llt.matrixL();
    41     if (llt.info() == Eigen::NumericalIssue) {
    42       throw std::runtime_error(
    43           "\nERROR: In NormalMultivar::generate method: Input covariance matrix is not "    44           "positive semi-definite\n");
    46   } 
catch (
const std::exception& e) {
    47     std::cerr << 
"\nERROR: In normal multivariate random number generation: "    48               << e.what() << std::endl;
    52   random_numbers.resize(cov.rows(), cases);
    56   for (
unsigned int i = 0; i < random_numbers.cols(); ++i) {
    57     for (
unsigned int j = 0; j < random_numbers.rows(); ++j) {
    58       random_numbers(j, i) = distribution_(generator_);
    63   for (
unsigned int i = 0; i < random_numbers.cols(); ++i) {
    64     random_numbers.col(i) = lower_cholesky * random_numbers.col(i) + means;
    71   return "NormalMultiVar";
 bool generate(Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > &random_numbers, const Eigen::VectorXd &means, const Eigen::MatrixXd &cov, unsigned int cases=1) override
 
std::string name() const override