Eigen::VectorXd sample(const Uniform &d, RNG &rng) { std::uniform_real_distribution<double> dist(0, 1); Eigen::ArrayXd sample(length(d)); for (Eigen::ArrayXd::Index i = 0; i < sample.rows(); i++) { sample(i) = dist(rng); } // Transform the output to fit within the support of the distribution return d.min().array() + sample * (d.max() - d.min()).array(); }
Eigen::VectorXd var(const Uniform &d) { return 1.0 / 12.0 * (d.max() - d.min()); }
bool insupport(const Uniform &d, const Eigen::VectorXd &x) { // Check that all dimensions are within the bounds of the distribution. return ((d.min().array() < x.array()) && (x.array() < d.max().array())).all(); }
Eigen::VectorXd mean(const Uniform &d) { return 0.5 * (d.min() + d.max()); }