ランク 1 で共分散行列を更新するプロジェクトで、多項ガウス密度を何度も計算します。共分散をゼロから計算する代わりに、cholupdate
関数を使用して新しいサンプルを共分散に追加し、新しいサンプルを共分散から削除しました。このようにして、更新は、共分散行列の $O(n^3)$ コレスキー分解ではなく、$O(n^2)$ で行われるように指示されます。
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\x
MATLAB で上三角行列の逆行列 (コードの一部) を計算するより高速な方法があるかどうか疑問に思います。MATLAB でより効率的に行うためのアイデアはありますか。
この方法では、行列式の計算も高速になることに注意してください。したがって、新しい方法は、行列式の計算にも悪くありません。