正半正定矩阵的行列式是否可能等于0.在我的情况下它将变为零。我有一个对角线矩阵,对角线元素非零。当我试图计算这个矩阵的行列式时,它会出现为0.为什么会这样?
答案 0 :(得分:7)
这就是为什么计算行列式绝不是一个好主意的原因。是的,我知道。你的书,老师或老板告诉你这样做。他们可能是错的。为什么?决定因素是规模不大的野兽。即使您有效地计算行列式(许多算法甚至无法做到这一点),您在大多数情况下并不真正想要一个行列式。
考虑这个简单的正定矩阵。
A = eye(1000);
决定因素是什么?我甚至不需要打扰。它是1.但是,如果你坚持......
det(A)
ans =
1
好的,这样才行。如果我们简单地将整个矩阵乘以一个小常数,例如0.1,那该怎么办?什么是决定因素?你可能会说没有理由打扰,因为我们已经知道了决定因素。它必须是det(A)* 0.1 ^ 1000,所以1e-1000。
det(A*0.1)
ans =
0
我们在这里做错了什么?失败的地方我们忘了记得我们正在进行浮点运算。由于MATLAB中double的动态范围仅下降到基本上
realmin
ans =
2.2250738585072e-308
然后较小的数字变为零 - 它们下溢。无论如何,在我们计算行列式的大部分时间里,无论如何我们都是出于错误的原因这样做了。如果他们想让你测试矩阵是否是单数,那么使用rank或cond,而不是det。
答案 1 :(得分:6)
根据定义,正半正定矩阵的特征值可能等于零,因此其行列式可以为零
现在,我看不出你对这句话的意思,
我有一个对角线矩阵,对角线元素非零。当我试图计算......
如果矩阵是对角线的,并且对角线中的所有元素都不为零,则行列式应该是非零的。如果您在计算机中计算它,请注意下溢。 您可以考虑对数之和而不是对角元素的乘积