【问题标题】:Fast and efficient upper diagonal matrix inverse快速高效的上对角矩阵求逆
【发布时间】:2011-06-18 16:01:09
【问题描述】:

我在一个项目中计算了很多次multinomial Gaussian 密度,我将协方差矩阵更新为 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;

其实代码很复杂,我这里简化了。我想知道是否有更快的方法来计算 MATLAB 中上三角矩阵的逆(代码中的 Rt\x 部分)。你有什么想法可以在 MATLAB 中更有效地完成它。

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

【问题讨论】:

    标签: matlab matrix covariance gaussian matrix-inverse


    【解决方案1】:

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

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

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

    【讨论】:

    • 如果有任何一种可以信任的语言来进行高效的矩阵运算,那就是 Matlab。
    猜你喜欢
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    相关资源
    最近更新 更多