【问题标题】:Rank of matrix contradicts the number of independent columns矩阵的秩与独立列的数量相矛盾
【发布时间】:2021-10-24 11:46:08
【问题描述】:

我有 50x49 矩阵 A,它有 49 个线性独立的列。但是,我的软件(八度)告诉我它的排名是 44:

  1. 是不是因为一些计算错误?如果是这样,那么如何防止此类错误?

  2. 如果软件能够正确计算rref(A),那么为什么它会以rank(A) 失败?这是否意味着计算rank(A) 比计算rref(A) 更容易出错,反之亦然?我的意思是 rref(A) 实际上告诉你排名,但这里有一个矛盾。


附:我已经检查过了,Python 也犯了同样的错误。


编辑 1:这是 matrix A 本身。给出了前 9 列。其余部分通过多项式特征获得。


EDIT 2:我发现了一个类似的问题。这是排名 10 的 10x10 matrix B(并且 octave 正确计算其排名)。但是,八度表示rank(B * B) = 9 这是不可能的。

【问题讨论】:

  • 我们如何判断您是否不提供矩阵...?或者一个更小的重现问题的方法
  • @LuisMendo,你好!你是对的。我已在编辑中附加了矩阵。不幸的是我找不到更短的,因为我是第一次遇到这个问题。
  • @LuisMendo,我找到了一个较短的矩阵B(参见EDIT 2)。它实际上并不代表相同的问题,因为rank(B) 与其独立列的数量并不矛盾,但这也是错误的行为。
  • 这似乎是一个数字问题,正如您所怀疑的那样。矩阵的条件数很大(见cond
  • 矩阵应该是可逆的,但它不是。这种区别在理论上是明确的,但在实践中并非如此。具有大 条件数 的矩阵(如您的示例中所示)是可逆的,但具有数值不稳定性。把它想象成B 有一个非常小的行列式,所以它几乎是单数的。结果,逆矩阵的计算精度会很差。或者它可能是 B 是“真正的”奇异的,但以前计算的小数值错误使它看起来非奇异......你怎么知道?是的,这是众所周知的。一般来说,避免使用大条件数的矩阵

标签: matlab matrix octave linear-algebra rank


【解决方案1】:

可逆矩阵(即满秩)和不可逆矩阵之间的区别在理论上是明确的,但在实践中并非如此。可以反转矩阵 B 和大 condition number(如您的示例),但计算逆矩阵在数值上是不稳定的。它大致对应于具有“小”行列式的B(使用适当的“小”相对度量),因此矩阵几乎是奇异的。结果,逆矩阵的计算精度会很差。在您的示例B 中,条件数(使用cond 计算)为2.069e9

另一种看待这个问题的方式是:当条件数很大时,B 很可能是“真正”奇异的,但是之前计算的小数值错误使它看起来几乎不是非奇异的。所以你不能确定。

rankrref 函数使用不同的算法(rank 的奇异值分解,rref 的高斯-乔丹消除和部分旋转)。对于表现良好的矩阵,两种情况下的数值误差都会很小,并且结果将是一致的。但是对于条件不良的矩阵,数值误差会很大,并且在每种情况下都可能不同,从而产生不一致的结果。

这是一个众所周知的数值代数问题。一般情况下,应避免对条件数较大的矩阵求逆。

【讨论】:

    猜你喜欢
    • 2012-04-05
    • 2018-07-22
    • 2011-03-31
    • 2019-05-16
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 2017-03-09
    相关资源
    最近更新 更多