首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >matlab中协方差矩阵的对称正半定性

matlab中协方差矩阵的对称正半定性
EN

Stack Overflow用户
提问于 2015-05-02 15:16:56
回答 1查看 966关注 0票数 0

大家好,我有个问题:

  • 我有n个向量的数据集,每个向量都有D维。
  • 我还有一个D*D大小的协方差矩阵,设为C。

我执行以下操作:

  • 我从数据集中选择K个向量,并随机选择E维数。设M是所选dimensions.so上选定数据的样本协方差,M是E*E矩阵。
  • 设P是C维数E的部分协方差矩阵,即。matlab中的C(E,E)

是以下矩阵的半正定?:

aM X= (1-a)P +

其中a是一个常数,如0.2。

在使用mvnrnd(均值,X)时,有时会出现以下错误: SIGMA必须是对称的半正定矩阵。

我的代码是:

代码语言:javascript
运行
复制
%%%Dims are randomly choosen dimensions
%%%Inds are randomly choosen Indexes form {1, 2, ...,n}
%%% PP are n D dimensional vectors, composing my data set PP is n*D
%%% Sigmaa is a D*D covariance matrix
co = cov(PP(Inds,Dims));
me = mean(PP(Inds,Dims));
Bettaa = 0.2;
sigmaaDims = sigmaa(Dims,Dims);
sigmaaDims = (1-Bettaa)*sigmaaDims + (co)*Bettaa;
Tem = mvnrnd(me,sigmaaDims);
EN

回答 1

Stack Overflow用户

发布于 2015-05-02 15:49:23

简单地看一下矩阵的维数,就无法判断矩阵是否是半正定的。

要确定给定的矩阵是否为正半定,必须检查它的特征值是否是非负的,并且它是对称的:

代码语言:javascript
运行
复制
symmetry = issymmetric(X);
[~,D]=eig(X);
eigenvalues = diag(D);
if all(eigenvalues>0) & symmetry
    disp('Positive semi-definite matrix.')
else
     disp('Non positive semi-definite matrix.')
end

其中X是您感兴趣的矩阵。

请注意,如果使用较弱的正定矩阵定义(不对称矩阵的扩展部分),X不需要是对称的,您将得到以下结果:

代码语言:javascript
运行
复制
[~,D]=eig(X);
eigenvalues = diag(D);
if all(eigenvalues>=0)
    disp('Positive semi-definite matrix.')
else
     disp('Non positive semi-definite matrix.')
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30003975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档