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

标签 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 中加速这个过程吗?

最佳答案

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

按照设计用途学习使用 MATLAB。尽量避免显式循环。例如,这将简单地平均上部和下部三角形:

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

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

关于matlab - 确保矩阵是对称的(并且是正半定的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15508743/

相关文章:

c# - 是否有索引器返回的具有协变类型参数的内置通用接口(interface)?

Python:手工协方差矩阵

C# 子类返回类型的协方差

javascript - javascript中的矩阵乘法

matlab - 如何在滑动窗口检测上实现积分图像?

matlab - 通过添加每个 n 来减少矩阵

matlab - 如何在 MATLAB 中创建一个画有线的图像矩阵?

matlab - 如何找到逆 Kron?

c - 来自矩阵分解的不可预测的浮点错误

linux - 如何在打开 matlab 文件的同时从 linux 终端启动 matlab?