如何在Galois域中找到矩阵的行级?

时间:2012-11-20 19:14:39

标签: matlab matrix rank galois-field

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

2 个答案:

答案 0 :(得分:2)

在线性代数中,列排名和行排名 始终 相等(请参阅proof),因此只需使用rank
(如果你计算的是伽罗瓦域上矩阵的等级,可以考虑改用gfrank,就像@DanBecker在他的评论中所建议的那样):

实施例

>> 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]

答案 1 :(得分:1)

施瓦茨,

两条评论:

  1. 你在评论中说:“等级函数在Galois领域也能正常工作!”我不认为这是正确的。考虑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。