【发布时间】:2011-06-18 16:01:09
【问题描述】:
我在一个项目中计算了很多次multinomial Gaussian 密度,我将协方差矩阵更新为 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;
其实代码很复杂,我这里简化了。我想知道是否有更快的方法来计算 MATLAB 中上三角矩阵的逆(代码中的 Rt\x 部分)。你有什么想法可以在 MATLAB 中更有效地完成它。
请注意,通过这种方式计算行列式也更快。所以新方法对于行列式的计算也不会差。
【问题讨论】:
标签: matlab matrix covariance gaussian matrix-inverse