计算矩阵行列式时遇到的问题

5

我正在尝试计算一个矩阵的逆矩阵的行列式。这个矩阵的逆矩阵是存在的。然而,当我尝试计算逆矩阵的行列式时,在Matlab中给出了无限值(Inf)。这是什么原因呢?


4
也许您的矩阵非常接近奇异矩阵。 - Oliver Charlesworth
你说的“非常接近奇异”的意思是什么? - rajan sthapit
1
如果行列式非常接近于奇异矩阵,那么行列式的值将非常接近于零,因此逆矩阵的行列式将非常大。如果计算受到数值精度的限制,结果可能会变成无穷大。 - Oliver Charlesworth
2
我明白了。但是在数值精度占主导地位的情况下,这可能已经足够接近了。 - Oliver Charlesworth
1
在这种情况下,问题解决了!您现在应该关闭这个问题。 - Oliver Charlesworth
显示剩余4条评论
1个回答

2
简短回答:给定 A = inv(B),那么 det(A)==Inf 可能有两种解释:
  1. 在计算行列式时发生了溢出,
  2. A 中存在一个或多个无限元素。
在第一种情况下,您的矩阵缩放得很差,因此 det(B) 可能下溢,而 det(A) 上溢。请记住,det(a*B) == a^N * det(B),其中 a 是标量,BNN 列的矩阵。
在第二种情况下(即 nnz(A==inf)>0),矩阵 B 可能是“工作精度奇异”的。
附:
如果矩阵具有较大的条件数,则矩阵近似奇异。 (小行列式与奇异性无关,因为行列式本身的大小会受缩放影响。)
如果矩阵中的零主元在高斯消元中产生,则该矩阵具有工作精度奇异性:在计算逆矩阵时,Matlab 必须计算 1/0,这会返回 Inf
实际上,在 Matlab 中,溢出和除以零异常没有被捕获,因此根据 IEEE 754 标准,Inf 值会传播。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接