2 #include <Eigen/Eigenvalues>
19 float norm = std::pow(sqrt2pi, - n) *
22 return norm * exp(-0.5 * quadform);
27 float probability =
pdf(x);
37 Eigen::VectorXf sum(n);
39 for (
unsigned int i = 0; i < nr_iterations; i++)
42 x = 0.5 * (x + Eigen::VectorXf::Ones(n));
45 sum = sum - (
static_cast<double>(nr_iterations) / 2) * Eigen::VectorXf::Ones(n);
46 x = sum / (
std::sqrt(
static_cast<double>(nr_iterations) / 12));
49 Eigen::SelfAdjointEigenSolver<Eigen::MatrixXf> eigen_solver(
covariance);
50 Eigen::MatrixXf eigenvectors = eigen_solver.eigenvectors().real();
53 Eigen::MatrixXf eigenvalues = eigen_solver.eigenvalues().real().asDiagonal();
56 Eigen::SelfAdjointEigenSolver<Eigen::MatrixXf> es(eigenvalues);
57 Eigen::MatrixXf sqrt_eigenvalues = es.operatorSqrt();
58 Eigen::MatrixXf Q = eigenvectors * sqrt_eigenvalues;
70 float norm = std::pow(sqrt2pi, - n) *
71 std::pow(covariance.determinant(), - 0.5);
73 float probability =
norm * exp(-0.5 * quadform);
74 return - probability * (x -
mean) / covariance.determinant();