【问题标题】:Issues with calculating the determinant of a matrix计算矩阵行列式的问题
【发布时间】:2012-05-01 21:22:03
【问题描述】:

我正在尝试计算矩阵逆的行列式。矩阵的逆存在。但是,当我尝试计算逆的行列式时,它在 matlab 中给了我 Inf 值。这背后的原因是什么?

【问题讨论】:

  • 也许您的矩阵非常接近单数。
  • 非常接近单数是什么意思
  • 如果它非常接近奇异,那么行列式将非常接近于零,因此逆的行列式将非常大。如果计算受到数值精度的限制,它最终可能是无穷大。
  • 我意识到这一点。但它可能已经足够接近,足以让数值精度占主导地位。
  • 这样的话,问题就解决了!您现在应该关闭此问题。

标签: matlab linear-algebra matrix-inverse


【解决方案1】:

简答:给定A = inv(B),那么det(A)==Inf可能有两种解释:

  1. 行列式数值计算过程中的溢出,
  2. A 中的一个或多个无限元素。

在第一种情况下,您的矩阵缩放不当,det(B) 可能下溢,det(A) 上溢。请记住det(a*B) == a^N * det(B),其中a 是标量,B 是N 乘以N 矩阵。

在第二种情况下(即nnz(A==inf)>0),矩阵B 可能是“工作精度的单数”。

PS:

如果矩阵的条件数很大,则它几乎是奇异的。 (小行列式与奇点无关,因为行列式本身的大小受缩放影响。)。

如果矩阵在高斯消元中具有零枢轴,则矩阵对于工作精度来说是奇异的:在计算逆时,matlab 必须计算 1/0,它返回 Inf。

事实上,在 Matlab 中溢出和零除异常不会被捕获,因此,根据 IEEE 754,Inf 值会被传播。

【讨论】:

    猜你喜欢
    • 2013-05-12
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    • 2022-06-18
    • 2022-12-22
    • 2011-02-24
    • 2013-12-31
    • 2011-07-30
    相关资源
    最近更新 更多