gpt4 book ai didi

algorithm - 使用高斯消除在 GF(2) 中查找矩阵的秩

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:04:40 25 4
gpt4 key购买 nike

我在 GF(2)(伽罗华域)中找到二进制矩阵的秩。 matlab中的rank函数是找不到的。例如,给定一个 400 x 400 的矩阵 here .如果您将排名函数用作

rank(A)
ans=357

但是,正确的答案。 GF(2) 中的这个代码必须是 356

B=gf(A);
rank(B);
ans=356;

但是这种方式花费的时间很多(大约16s)。因此,我使用高斯消元法在短时间内找到 GF(2) 中的秩。但是,它效果不佳。有时,它返回真值,但有时返回错误。请查看我的代码并让我知道代码中的问题。请注意,与上面的代码相比,它花费的时间非常少

function rankA =GaussEliRank(A) 
tic
mat = A;
[m n] = size(A); % read the size of the original matrix A
for i = 1 : n
j = find(mat(i:m, i), 1); % finds the FIRST 1 in i-th column starting at i
if isempty(j)
mat = mat( sum(mat,2)>0 ,:);
rankA=rank(mat);
return;
else
j = j + i - 1; % we need to add i-1 since j starts at i
temp = mat(j, :); % swap rows
mat(j, :) = mat(i, :);
mat(i, :) = temp;
% add i-th row to all rows that contain 1 in i-th column
% starting at j+1 - remember up to j are zeros
for k = find(mat( (j+1):m, i ))'
mat(j + k, :) = bitxor(mat(j + k, :), mat(i, :));
end
end
end
%remove all-zero rows if there are some
mat = mat( sum(mat,2)>0 ,:);
if any(sum( mat(:,1:n) ,2)==0) % no solution because matrix A contains
error('No solution.'); % all-zero row, but with nonzero RHS
end
rankA=sum(sum(mat,2)>0);
end

最佳答案

让我们使用 gfrank 函数。它适合您的矩阵。使用:

gfrank(A)
ans=
356

更多详情:How to find the row rank of matrix in Galois fields?

关于algorithm - 使用高斯消除在 GF(2) 中查找矩阵的秩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27330139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com