我在一个项目中多次计算多项式高斯密度,我将协方差矩阵更新为 rank-1。我没有从头开始计算协方差,而是使用该cholupdate
函数将新样本添加到协方差并删除新样本到协方差。通过这种方式,更新被告知在 $O(n^2)$ 中,而不是在协方差矩阵的 $O(n^3)$ Cholesky 分解中。
persistent R
if (initialize) % or isempty(R)
% compute covariance V
R = chol(V);
else
R = cholupdate(R,xAdded);
detVar = prod(diag(R))^2;
Rt = R';
coeff = 1/sqrt((2*pi)^dimension*detVar);
y = Rt\x;
logp = log(coeff) - 1/2 * norm(y)^2;
实际上代码很复杂,但我在这里简化了它。我想知道是否有更快的方法来计算Rt\x
MATLAB 中上三角矩阵的逆(代码中的部分)。你有什么想法可以在 MATLAB 中更有效地完成它。
请注意,以这种方式计算行列式也更快。所以新方法对于行列式的计算也不会差。