Matlab具有内置函数,用于计算具有十进制数字的矩阵的秩以及有限字段数。但是,如果我没有错,他们只计算最低等级(行等级和列等级最少)。我想只计算行等级,即找到矩阵的独立行数(在我的例子中是有限域)。是否有功能或方法来做到这一点?
答案 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)
施瓦茨,
两条评论:
你在评论中说:“等级函数在Galois领域也能正常工作!”我不认为这是正确的。考虑gfrank
的文档页面上给出的示例:
A = [1 0 1;
2 1 0;
0 1 1];
gfrank(A,3) % gives answer 2
rank(A) % gives answer 3
但我有可能误解了事情!
你还说过“如何检查矩阵的行是否是线性独立的?我上面发布的解决方案是否合法,即每一行并逐一查找所有其他行的排名? “
我不知道你为什么说“一个接一个地找到所有其他行的排名”。可以具有一组矢量,这些矢量是成对线性独立的,但是线性地依赖于作为一组。只需考虑向量[0 1]
,[1 0]
,[1 1]
。没有向量是任何其他向量的倍数,但该集合不是线性独立的。
你的问题似乎是你有一组你知道是线性独立的向量。您向该集添加向量,并想知道新集是否仍然是线性独立的。正如@EitanT所说,您需要做的就是将(行)向量组合成一个矩阵,并检查其rank
(或gfrank
)是否等于行数。无需“一个接一个”地做任何事情。
由于您知道“旧”集是线性独立的,因此可能有一个很好的快速算法来检查新向量是否使线性依赖。也许在每个步骤中,您将该集合正交化,并且可能会在给定新向量更快的情况下检查线性独立性的过程。这可能会成为一个有趣的问题,比如mathoverflow。