主要内容

确定矩阵是否对称正定

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

方法一:尝试切尔斯基因子分解

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

A = [1 -1 0;1 5 0;0 0 7]
一个=3×31 -1 0 -1 5 0 0 0
试一试胆固醇(A) disp (“矩阵是对称正定的。”我disp ("矩阵不是对称正定的"结束
ans =3×31.0000 -1.0000 00 2 0000 0 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)返回真正的,即使特征值在数值上为零,且矩阵更好地归类为对称正数明确的。

如果要使用公差进行比较,可以使用修改后的命令

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

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

另请参阅

|

相关的话题