矩阵的等级与独立列的数量相矛盾

Rank of matrix contradicts the number of independent columns

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

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

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


P.S。我已经检查过,Python 犯了同样的错误。


编辑 1:这是 matrix A 本身。给出了前 9 列。其余的是用多项式特征得到的。


编辑 2:我发现了类似的问题。这是排名 10 的 10x10 matrix B(八度正确计算其排名)。但是,octave 说 rank(B * B) = 9 这是不可能的。

可逆矩阵(即满秩)和不可逆矩阵之间的区别在理论上是明确的,但在实践中并非如此。矩阵 Bcondition number (as in your example) can be inverted, but computing the inverse is numerically unstable. It roughly corresponds to B having a determinant that is "small" (using an appropriate, relative measure of "small"), so the matrix is almost singular. As a result, the inverse matrix will be computed with bad accuracy. In your example B, the condition number (computed with cond) 是 2.069e9.

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

rankrref 函数使用不同的算法(rank, Gauss-Jordan elimination with partial pivoting for rref 的奇异值分解)。对于行为良好的矩阵,两种情况下的数值误差都将很小,并且结果将是一致的。但是对于条件不好的矩阵,数值误差会很大,并且在每种情况下都可能不同,从而给出不一致的结果。

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