Matlab 确保矩阵对称(且半正定)

Matlab 确保矩阵对称(且半正定),matlab,matrix,covariance,Matlab,Matrix,Covariance,我目前正在为一组协方差矩阵实施在线估计算法,由于数值错误,我的协方差矩阵在任何时候都不对称 我目前通过将上三角矩阵镜像到下三角矩阵来解决此问题: for i=1:T tempSigma(:, :, i) = eye(D)/sigmaT(:,:,i); temp = triu(tempSigma(:,:,i), 1); tempSigma(:, :, i) = triu(tempSigma(:, :, i)); tempSigma(:

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

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

    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中有什么方法可以加速这个过程吗?

所以你有一个NXT数组,其中矩阵的每个平面都被视为协方差矩阵

学习使用MATLAB,因为它是为使用而设计的。尽量避免显式循环。例如,这将简单地平均上部和下部三角形:

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

这是一种解决问题的合乎逻辑的方法,可以说比完全抛弃较低的三角形要好。它在一行代码中运行,没有显式循环。

维度有多大?速度有多慢?强制对称能保证半正定性吗?不,