2

Matlab 有一个内置函数,用于计算具有十进制数和有限域数的矩阵的秩。但是,如果我没记错的话,他们只计算最低排名(行排名和列排名最低)。我只想计算行秩,即找到矩阵的独立行数(在我的例子中是有限字段)。有没有功能或方法可以做到这一点?

4

2 回答 2

2

在线性代数中,列秩和行秩总是相等的(见证明),所以只需使用 (如果你正在计算伽罗瓦域上的矩阵的秩,请考虑使用,就像@DanBecker 在他的评论中建议的那样):rank
gfrank

例子:

>> A = [1 2 3; 4 5 6]

A =
    1   2   3
    4   5   6

>> rank(A)
ans =
    2

也许所有三列似乎都是线性独立的,但它们相互依赖的:

[1 2; 4 5] \ [3; 6]
ans =
    -1
     2

意思是-1 * [1; 4] + 2 * [2; 5] = [3; 6]

于 2012-11-20T20:40:27.993 回答
1

施瓦茨,

两条评论:

  1. 您在评论中声明“等级函数在伽罗瓦域中也可以正常工作!” 我不认为这是正确的。考虑文档页面上给出的示例gfrank

    A = [1 0 1;
       2 1 0;
       0 1 1];
    gfrank(A,3) % gives answer 2
    rank(A) % gives answer 3
    

    但有可能我误解了一些事情!

  2. 您还说“如何检查矩阵的行是否线性独立?我在上面发布的解决方案对您来说是否合法,即获取每一行并逐一查找其与所有其他行的排名?”

    我不知道你为什么说“一一找到它与所有其他行的排名”。可以有一组成对线性独立但线性相关的向量作为一个组。只需考虑向量[0 1], [1 0], [1 1]。没有向量是任何其他向量的倍数,但集合不是线性独立的。

    你的问题似乎是你有一组你知道是线性独立的向量。您向该集合添加一个向量,并想知道新集合是否仍然线性独立。正如@EitanT 所说,您需要做的就是将(行)向量组合成一个矩阵并检查它的rank(或gfrank)是否等于行数。无需“一个接一个”地做任何事情。

    既然您知道“旧”集是线性独立的,也许有一个很好的快速算法来检查新向量是否使事物线性相关。也许在每一步你都会正交化集合,也许这会使给定新向量的线性独立性检查过程更快。这可能会在诸如 mathoverflow 之类的地方提出一个有趣的问题。

于 2012-11-21T17:55:37.547 回答