2

我在一个项目中多次计算多项式高斯密度,我将协方差矩阵更新为 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\xMATLAB 中上三角矩阵的逆(代码中的部分)。你有什么想法可以在 MATLAB 中更有效地完成它。

请注意,以这种方式计算行列式也更快。所以新方法对于行列式的计算也不会差。

4

1 回答 1

2

mldivide函数非常聪明可以检查三角矩阵,在这种情况下,它使用前向/后向替换方法来有效地求解线性系统:

AX=B  <-->  X=inv(A)*B  <-->  X=A\B

Lx=b

(计算 x1,将其代入第二个等式并计算 x2,代入第三个……)

于 2011-06-19T00:41:18.583 回答