我正在研究二进制矩阵(1或0)的最小多项式。我知道一些算法来找到矩阵的最小多项式,例如 Berlekamp Massey。您能否向我建议一些 matlab 代码来在 Galios Field 2 中实现 Berlekamp Massey。我尝试使用 linbox lib,但需要很长时间才能完成并且没有申请二进制矩阵。这是我的矩阵
A=[1 0 0 0;
0 1 0 1;
1 1 1 1;
1 1 1 0];
这是我的matlab代码(但我认为它不适合我在GF(2)中的问题)
function f=minPoly_Berlemap(A,b)
A=[1 0 0 0;
0 1 0 1;
1 1 1 1;
1 1 1 0];
b=[1;1;0;0];
[m n]=size(A);
A_u=[];
I=eye(n);
%% Step1
for i=1:(2*n)
A_u(:,i)= mod(A^(i-1)*b,2);
end
%% Step2
k=0;
g=[1];
gk=[1];
d=0;
%% Step3
while (d<n&k<n)
%% Step4
u_k=I(:,k+1);
s=mod(u_k'*A_u,2);
%% Step 5
d = length(g)-1;
mul_gs =mod( conv(g(end:-1:1),s),2); %multiply two polynomial
s_g = mul_gs(d+1:end-d);
%% Step 6
f=Berlekamp_Massey2(s_g);
%% Step 7
gk=mod(conv(f,g),2);
if d<n
k=k+1;
g=gk;
else
break;
end
end
f=g
end