Matlab 矩阵行列式计算的几个问题
我试图计算矩阵逆的行列式。矩阵的逆矩阵存在。然而,当我试图计算逆的行列式时,它在matlab中给了我Inf值。这背后的原因是什么?简短的回答:给定Matlab 矩阵行列式计算的几个问题,matlab,linear-algebra,matrix-inverse,Matlab,Linear Algebra,Matrix Inverse,我试图计算矩阵逆的行列式。矩阵的逆矩阵存在。然而,当我试图计算逆的行列式时,它在matlab中给了我Inf值。这背后的原因是什么?简短的回答:给定A=inv(B),那么det(A)==Inf可能有两种解释: 行列式数值计算期间的溢出 A中的一个或多个无限元素 在第一种情况下,矩阵的缩放比例很差,因此det(B)可能会下溢而det(A)溢出。请记住,det(a*B)=a^N*det(B)其中a是标量,B是N次N矩阵 在第二种情况下(即nnz(A==inf)>0),矩阵B可能是“工作精度的奇异值”
A=inv(B)
,那么det(A)==Inf
可能有两种解释:
A
中的一个或多个无限元素det(B)
可能会下溢而det(A)
溢出。请记住,det(a*B)=a^N*det(B)
其中a
是标量,B
是N
次N
矩阵
在第二种情况下(即nnz(A==inf)>0
),矩阵B
可能是“工作精度的奇异值”
附言:
如果矩阵的条件数很大,则它几乎是奇异的。(小行列式与奇点无关,因为行列式本身的大小受缩放的影响。)
如果矩阵在高斯消去法中有一个零轴,则其工作精度是奇异的:当计算逆矩阵时,matlab必须计算1/0
,返回Inf
事实上,在Matlab中,溢出和零除法异常不会被捕获,因此,根据IEEE 754,一个
Inf
值会被传播。也许你的矩阵非常接近奇异值。非常接近奇异值是什么意思?如果非常接近奇异值,那么行列式将非常接近零,所以倒数的行列式会很大。如果计算受到数值精度的限制,结果可能是无穷大。我意识到这一点。但它可能足够接近以数字精度为主导。在这种情况下,问题解决了!你现在应该结束这个问题。