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中更有效地做到這一點。
注意計算行列式也是這樣快。所以這個新方法對於行列式的計算也不會有什麼壞處。
如果有一個可以信任做有效的矩陣操作的任何語言,這是Matlab的。 – Jonas