如何用MATLAB确定一个矩阵是正定的?
435次观看(过去30天)
显示旧的注释
如果一个对称矩阵的所有特征值的实部都是正定的,则它被定义为正定的。
如果(B+B')/2的所有特征值都为正,则非对称矩阵(B)为正定。
接受的答案
MathWorks支金宝app援小组
2013年9月9日
此更改已被合并到Release 14 Service Pack 3 (R14SP3)的文档中。对于以前的版本,请阅读下面的任何其他信息:
与使用EIG函数来获得特征值以确定正确定性相比,使用CHOL函数在计算上更有效。CHOL函数提供了可选的第二个输出参数“p”,如果发现矩阵是正定的,则该参数为零。如果输入矩阵不是正定的,那么“p”将是一个正整数:
>>[~,p] = chol(0 (3))
p =
1
如果CHOL函数只提供了一个输出参数,并且给出了一个非正定的矩阵,那么它将返回一个错误。注意:CHOL期望它的输入矩阵是对称的,并且只关注矩阵的上三角形部分。
更多答案(3)
迈克尔·克鲁格
2014年6月9日
一个矩阵是正定的如果它所有相关的特征值都是正的。
一种检查矩阵A是否正定的方法:
A = [1 2 3;4 5 6;7 8 9];示例矩阵
eig_A = eig(A);
Flag = 0;
为i = 1:rank(A)
如果eig_A(i) <= 0
Flag = 1;
结束
结束
如果Flag == 1
disp (矩阵不是正定的)
其他的
disp (矩阵是正定的)
结束
eig_A的条件可以更改为检查阳性、半阳性、阴性或半阴性的确定性。
s.m.雷扬·乔杜里
2021年11月12日
编辑:沃尔特·罗伯森
2021年11月13日
上述“非对称”矩阵的条件一般适用于所有对称或非对称矩阵。下面给出了基于条件的代码片段。
适用于任何对称或不对称矩阵,实矩阵或复矩阵
A = [12, 3, -5;
1,5,3;
3,7,13];理论上A是正定的(PD)。
eig_vals = eig((A + A')/2);
is_pd = [sum([sign(eig_vals)==1])==length(A)];%标志来检查是否是PD
如果is_pd = = 1
disp ("A是正定的")
其他的
disp ("A不是正定的")
结束
B = [1 2 3;
4 5 6;
7 8 9];% B不是正定的。
eig_vals = eig((B + B')/2);
is_pd = [sum([sign(eig_vals)==1])==length(B)];
如果is_pd = = 1
disp ("B是正定的")
其他的
disp ("B不是正定的")
结束