MATLAB的"SIGMA必须是对称且肯定的"错误有时没有意义

pau*_*ons 3 matlab numerical probability

我不确定这是一个编程或统计问题,但我确定应该有一个数值问题.因此,可能会提出一种程序化解决方案.

我正在使用MATLAB的mvnpdf函数来计算某些观测值的多变量高斯PDF.经常我得到"SIGMA必须是对称且肯定的"错误.

但是,我从数据中获取了covarince矩阵,因此数据应该是合法的.重新生成问题的代码是:

err_cnt = 0;
for i = 1:1000
    try 
        a = rand(3); 
        c = cov(a); 
        m = mean(a); 
        mvnpdf(a, m, c);
    catch me
        err_cnt = err_cnt + 1;
    end
end
Run Code Online (Sandbox Code Playgroud)

每次跑步都会出现约500-600个错误.

PS我不会在我的情况下生成随机数据,只是在这里生成来演示.

abc*_*bcd 12

这是线性代数问题而不是编程问题.回想一下k维多元正态分布的PDF公式:

在此输入图像描述

当你的矩阵不是严格正定的(即它是单数)时,分母中的行列式为零,并且未定义指数中的倒数,这就是你得到误差的原因.

然而,一种常见的误解是协方差矩阵必须是正定的.这不是真的 - 协方差矩阵只需要是正的.您的数据完全有可能具有单数的协方差矩阵.此外,由于您正在形成的是您观察到的数据的样本协方差矩阵,因此您可能会因没有足够的观察而产生奇点.