确保矩阵是对称的(并且是正半定的)

时间:2013-03-19 19:31:11

标签: matlab matrix covariance

我目前正在为一组协方差矩阵实现在线估计算法,由于数值误差,我的协方差矩阵在任何时候都不是对称的。

我目前通过将上三角矩阵镜像到下一个矩阵来解决这个问题:

    for i=1:T
       tempSigma(:, :, i) = eye(D)/sigmaT(:,:,i);
       temp = triu(tempSigma(:,:,i), 1);
       tempSigma(:, :, i) = triu(tempSigma(:, :, i));
       tempSigma(:, :, i) = tempSigma(:, :, i) + temp';
    end

对于大* T * s,对每个矩阵进行循环变得非常慢。有没有办法在Matlab中加快速度?

1 个答案:

答案 0 :(得分:5)

所以你有一个NxNxT数组,其中矩阵的每个平面都被认为是一个协方差矩阵?

学习如何使用MATLAB。尽量避免显式循环。例如,这将简单地平均上下三角形:

tempSigma = (tempSigma + permute(tempSigma,[2 1 3]))/2;

解决这个问题是一种合乎逻辑的方法,可以说完全抛弃下三角形更好。它运行在一行代码中,没有明确的循环。