确定矩阵是否对称正定

本主题解释如何使用胆固醇eig函数确定一个矩阵是否对称正定(具有所有正特征值的对称矩阵)。

方法1:尝试Cholesky分解

检验矩阵是否对称正定的最有效方法是简单地尝试使用胆固醇在矩阵。如果分解失败,则矩阵不是对称正定的。这种方法不要求矩阵是对称的,以获得成功的测试(如果矩阵是不对称的,则分解失败)。

A = [1 -1 0;1 5 0;0 0 7]
一个=3×31 -1 0 -1 5 0 0 0 7
试一试胆固醇(A) disp (矩阵是对称正定的)我disp (“矩阵非对称正定”)结束
ans =3×31.0000 -1.0000 00 2.0000 00 2.6458
矩阵是对称正定的。

这种方法的缺点是,它不能推广也检查矩阵是否对称正半定(其中特征值可以是正或零)。

方法2:检查特征值

但使用效率较低eig为了计算所有的特征值并检查它们的值,这种方法更加灵活,因为你也可以使用它来检查一个矩阵是否对称正半定。然而,对于小矩阵,在检查一个矩阵是否对称正定时,两种方法在计算时间上的差异可以忽略不计。

此方法需要您使用issymmetric在执行测试前检查矩阵是否对称(如果矩阵不对称,则不需要计算特征值)。

tf = issymmetric (A)
tf =逻辑1
d = eig (A)
d =3×10.7639 5.2361 7.0000
isposdef = all(d > 0)
isposdef =逻辑1

你可以扩展这个方法来检查一个矩阵是否对称正半定的命令所有(d > = 0)

数值的考虑

对于相同的矩阵,这里列出的方法可能会给出不同的结果。由于这两种计算都涉及舍入误差,所以每种算法都检查矩阵的确定性一个。在实践中,公差的使用是一种更稳健的比较方法,因为特征值可以在机器精度范围内数值为零,并且可以稍微正或稍微负。

例如,如果一个矩阵的特征值是每股收益,然后进行比较isposdef = all(d > 0)返回真正的,即使特征值在数值上为零,且该矩阵最好归为对称正明确的。

要使用容错执行比较,可以使用修改后的命令

tf = issymmetric(A) d = eig(A) isposdef = all(d > tol) issemidef = all(d > -tol)

公差定义了一个围绕零的半径,并且在该半径内的任何特征值都被视为零。在大多数情况下,一个好的选择是长度(d) * eps (max (d)),它考虑了最大特征值的大小。

另请参阅

|

相关的话题