正半正定矩阵的行列式

raj*_*pit 5 matlab matrix linear-algebra

是否有可能正半正定矩阵的行列式等于0.在我的情况下它将变为零.我有一个对角线矩阵,对角线元素非零.当我试图计算这个矩阵的行列式时,它会出现为0.为什么会这样?

小智 7

这就是计算行列式从来不是一个好主意的原因.是的,我知道.你的书,老师或老板告诉你这样做.他们可能是错的.为什么?决定因素是规模不大的野兽.即使您有效地计算行列式(许多算法甚至无法做到),您在大多数情况下并不真正想要一个行列式.

考虑这个简单的正定矩阵.

A = eye(1000);
Run Code Online (Sandbox Code Playgroud)

什么是决定因素?我甚至不需要打扰.它是1.但是,如果你坚持......

det(A)
ans =
     1
Run Code Online (Sandbox Code Playgroud)

好的,这样才行.如果我们简单地将整个矩阵乘以一个小常数,例如0.1,那该怎么办?什么是决定因素?你可能会说没有理由打扰,因为我们已经知道了决定因素.它必须是det(A)*0.1 ^ 1000,所以1e-1000.

det(A*0.1)
ans =
     0
Run Code Online (Sandbox Code Playgroud)

我们在这做错了什么?失败的地方我们忘了记得我们正在进行浮点运算.由于MATLAB中double的动态范围仅下降到基本上

realmin
ans =
      2.2250738585072e-308
Run Code Online (Sandbox Code Playgroud)

然后较小的数字变为零 - 它们下溢.无论如何,在我们计算行列式的大部分时间里,无论如何我们都是出于错误的原因这样做了.如果他们想让你测试矩阵是否是单数,那么使用rank或cond,而不是det.


jpm*_*muc 6

根据定义,正半正定矩阵可以具有等于零的特征值,因此其行列式因此可以为零

现在,我看不出你对句子的意思,

我有一个对角线矩阵,对角线元素非零.当我试着计算......

如果矩阵是对角线的,并且对角线中的所有元素都不为零,则行列式应该是非零的.如果您在计算机中计算它,请注意下溢.您可以考虑对数之和而不是对角元素的乘积