【发布时间】:2017-01-08 21:28:13
【问题描述】:
现在我有以下函数来评估高斯密度:
double densities::evalMultivNorm(const Eigen::VectorXd &x, const Eigen::VectorXd &meanVec, const Eigen::MatrixXd &covMat)
{
double inv_sqrt_2pi = 0.3989422804014327;
double quadform = (x - meanVec).transpose() * covMat.inverse() * (x-meanVec);
double normConst = pow(inv_sqrt_2pi, covMat.rows()) * pow(covMat.determinant(), -.5);
return normConst * exp(-.5* quadform);
}
这只是抄写formula。但是我得到了很多 0、nans 和 infs。我怀疑它来自covMat.determinant() 部分非常接近于零。
我听说将x-meanVec 与其协方差矩阵的“平方根”的倒数预乘起来更“稳定”。从统计上讲,这为您提供了一个均值为零的随机向量,并将单位矩阵作为其协方差矩阵。我的问题是:
- 这真的是最好的方法吗?
- 哪个是“最好的”平方根技术,以及
- 我该怎么做? (最好使用 Eigen)
【问题讨论】:
标签: c++ eigen normal-distribution