matlab中的函数gfrank(A,p)应该返回GF(p)中矩阵A的秩,其中p是素数。
但似乎这个功能有问题。因为它为某些矩阵返回了不可能的值。
例如10 * 9矩阵:
0 1 1 1 1 0 1 0 0
1 0 0 1 0 1 0 1 1
0 1 1 0 1 1 1 0 0
0 1 1 0 1 1 1 0 1
0 1 0 0 0 0 0 0 1
0 0 0 0 1 0 0 1 0
0 0 0 0 0 0 0 1 0
0 0 0 1 0 0 0 1 1
0 1 0 1 0 1 0 1 0
0 1 1 1 1 0 0 1 1
在GF(29)中,函数返回10,这是不可能的,因为它大于其中一个维度。
使用此代码找到了示例:
M = 10;
pP = [];
Y =[];
for P = 19:100
if isprime(P)
P
pause(3)
for i = 1:100
A=round(rand(M,M-1));
pP = [pP,P];
if(gfrank(A,P) > M-1) % A IS AN (M-1)*M MATRIX.
disp(A); % IF RANK OF A IS GREATER THAN OR
disp(gfrank(A,P)); % EQUAL TO M, WE HAVE AN ERROR!
end
end
end
end