矩阵的等级与独立列的数量相矛盾
Rank of matrix contradicts the number of independent columns
我有一个 50x49 矩阵 A
,它有 49 个线性独立的列。然而,我的软件(octave)告诉我它的排名是 44:
是不是计算错误?如果是这样,那么如何防止此类错误?
如果软件能够正确计算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
这是不可能的。
可逆矩阵(即满秩)和不可逆矩阵之间的区别在理论上是明确的,但在实践中并非如此。矩阵 B
大 condition 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
很可能是“真正的”奇异的,但是之前计算中的小数值错误使它看起来几乎不是非奇异的.所以你不能确定。
rank
和 rref
函数使用不同的算法(rank
, Gauss-Jordan elimination with partial pivoting for rref
的奇异值分解)。对于行为良好的矩阵,两种情况下的数值误差都将很小,并且结果将是一致的。但是对于条件不好的矩阵,数值误差会很大,并且在每种情况下都可能不同,从而给出不一致的结果。
这是一个众所周知的数值代数问题。一般情况下,避免求大条件数的矩阵。
我有一个 50x49 矩阵 A
,它有 49 个线性独立的列。然而,我的软件(octave)告诉我它的排名是 44:
是不是计算错误?如果是这样,那么如何防止此类错误?
如果软件能够正确计算
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
这是不可能的。
可逆矩阵(即满秩)和不可逆矩阵之间的区别在理论上是明确的,但在实践中并非如此。矩阵 B
大 condition 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
很可能是“真正的”奇异的,但是之前计算中的小数值错误使它看起来几乎不是非奇异的.所以你不能确定。
rank
和 rref
函数使用不同的算法(rank
, Gauss-Jordan elimination with partial pivoting for rref
的奇异值分解)。对于行为良好的矩阵,两种情况下的数值误差都将很小,并且结果将是一致的。但是对于条件不好的矩阵,数值误差会很大,并且在每种情况下都可能不同,从而给出不一致的结果。
这是一个众所周知的数值代数问题。一般情况下,避免求大条件数的矩阵。