2011-06-18 68 views
2

我計算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中更有效地做到這一點。

注意計算行列式也是這樣快。所以這個新方法對於行列式的計算也不會有什麼壞處。

回答

2

mldivide功能是smart enough檢查三角矩陣,在這種情況下使用一個forward/backward substitution方法有效地解決了線性系統:

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

Lx=b

(計算X1,在第二替代它公式和計算X2,替補在第三...)

+3

如果有一個可以信任做有效的矩陣操作的任何語言,這是Matlab的。 – Jonas