29 std::vector<double> Sample(Eigen::VectorXd& mean, Eigen::MatrixXd& covariance, std::mt19937& gen) {
31 int mean_cols = mean.size();
32 int cov_rows = covariance.rows();
33 int cov_cols = covariance.cols();
34 CHECK_EQ(mean_cols, cov_cols);
37 Eigen::LLT<Eigen::MatrixXd> decomposition(covariance);
38 Eigen::MatrixXd covariance_chol = decomposition.matrixL();
41 Eigen::VectorXd std_norm_vec(cov_rows);
42 for (
int i = 0; i < cov_rows; i++) {
43 std_norm_vec(i) = std_normal_dist_(gen);
47 Eigen::VectorXd sampled_values_raw = mean + covariance_chol * std_norm_vec;
48 std::vector<double> result(cov_rows);
49 for (
int i = 0; i < cov_rows; i++) {
50 result[i] = sampled_values_raw(i, 0);
54 Eigen::VectorXd SampleEigen(Eigen::VectorXd& mean, Eigen::MatrixXd& covariance, std::mt19937& gen) {
56 int mean_cols = mean.size();
57 int cov_rows = covariance.rows();
58 int cov_cols = covariance.cols();
59 CHECK_EQ(mean_cols, cov_cols);
62 Eigen::LLT<Eigen::MatrixXd> decomposition(covariance);
63 Eigen::MatrixXd covariance_chol = decomposition.matrixL();
66 Eigen::VectorXd std_norm_vec(cov_rows);
67 for (
int i = 0; i < cov_rows; i++) {
68 std_norm_vec(i) = std_normal_dist_(gen);
72 return mean + covariance_chol * std_norm_vec;