5

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

4

2 回答 2

8

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

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

A = eye(1000);

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

det(A)
ans =
     1

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

det(A*0.1)
ans =
     0

我们在这里做错了什么?失败的地方是我们忘记了我们在做浮点运算。由于 MATLAB 中双精度的动态范围仅下降到本质上

realmin
ans =
      2.2250738585072e-308

然后较小的数字变成零 - 它们下溢。无论如何,大多数时候当我们计算行列式时,无论如何我们都是出于错误的原因这样做的。如果他们想让你测试一个矩阵是否是奇异的,那么使用 rank 或 cond,而不是 det。

于 2012-05-02T17:46:50.877 回答
6

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

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

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

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

于 2012-05-01T22:05:09.653 回答