【发布时间】:2021-10-24 11:46:08
【问题描述】:
我有 50x49 矩阵 A,它有 49 个线性独立的列。但是,我的软件(八度)告诉我它的排名是 44:
-
是不是因为一些计算错误?如果是这样,那么如何防止此类错误?
-
如果软件能够正确计算
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