3 #include <Eigen/Eigenvalues>
20 float norm = std::pow(sqrt2pi, -
n) * std::pow(
covariance.determinant(), -0.5);
22 return norm * exp(-0.5 * quadform);
28 float probability =
pdf(
x);
39 Eigen::VectorXf sum(
n);
41 for (
unsigned int i = 0; i < nr_iterations; i++)
44 x = 0.5 * (
x + Eigen::VectorXf::Ones(
n));
47 sum = sum - (
static_cast<double>(nr_iterations) / 2) * Eigen::VectorXf::Ones(
n);
48 x = sum / (
std::sqrt(
static_cast<double>(nr_iterations) / 12));
51 Eigen::SelfAdjointEigenSolver<Eigen::MatrixXf> eigen_solver(
covariance);
52 Eigen::MatrixXf eigenvectors = eigen_solver.eigenvectors().real();
55 Eigen::MatrixXf eigenvalues = eigen_solver.eigenvalues().real().asDiagonal();
58 Eigen::SelfAdjointEigenSolver<Eigen::MatrixXf> es(eigenvalues);
59 Eigen::MatrixXf sqrt_eigenvalues = es.operatorSqrt();
60 Eigen::MatrixXf Q = eigenvectors * sqrt_eigenvalues;
68 Eigen::MatrixXf covariance =
73 float norm = std::pow(sqrt2pi, -
n) * std::pow(covariance.determinant(), -0.5);
75 float probability =
norm * exp(-0.5 * quadform);
76 return -probability * (
x -
mean) / covariance.determinant();