快速有效的上对角矩阵逆

时间:2011-06-18 16:01:10

标签: matlab matrix covariance gaussian matrix-inverse

我在一个项目中计算multinomial Gaussian密度的次数很多次,我用秩-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中更有效地完成它。

请注意,以这种方式计算行列式也会更快。因此,新方法对于行列式的计算也没有坏处。

1 个答案:

答案 0 :(得分:2)

mldivide函数smart enough来检查三角矩阵,在这种情况下,它使用forward/backward substitution方法有效地求解线性系统:

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

Lx=b

(计算x1,将其替换为第二个等式并计算x2,替换为第三个......)