cyfile / Matlab-base-toolbox

本人使用Matlab基础工具箱所编写的各种代码
1 stars 0 forks source link

伪随机数的预测 #10

Open 213cy opened 8 years ago

213cy commented 8 years ago

试图通过伪随机数的相关性对伪随机数进行预测(预测失败了)

111

213cy commented 8 years ago
N=5000;
a=rand(1,N)>0.5;
%%
b=rand(1,N)>0.5;
if 0
    B2=rand(1,N)>0.5;
    %B=9*ones(1,n);
    bb=cumsum(a)-(1:N)/2;
    B2(bb>0.3)=0;
    B2(bb<-0.3)=1;
    B2=[rand>0.5,B2(1:end-1)];
end
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
B=zeros(1,N);
P=zeros(1,10);
Val=zeros(1,10);
LEN_max=zeros(1,N);
IND_max=zeros(1,N);
for k=1:N
    %LEN_max=0;
    ind=0;
    %%
    for r=1:k-2
        py=k-1;
        px=r;
        len=0;
        while px >=1 && a(px)==a(py)
            px=px-1;
            py=py-1;
            len=len+1;
        end
        if len == LEN_max(k) && len>0
            ind=ind+1;
            P(ind)=r;
            Val(ind)=a(r+1);
        end
        if len>LEN_max(k)
            LEN_max(k)=len;
            ind=1;
            P(ind)=r;
            Val(ind)=a(r+1);
        end
    end
    IND_max(k)=ind;

    if  sum(Val(1:ind))==ind/2 %% || ind==0
        B(k)=rand>0.5;
    else
        B(k)= sum(Val(1:ind))<ind/2;
    end
end
%%
%%
c=xor(a,b);sum(c(round(2*N/3):N))
C=xor(a,B);sum(C(round(2*N/3):N))
d=filter(ones(1,10),1,[c;C]');
plot(d)
figure
subplot(211)
plot(LEN_max)
subplot(212)
plot(IND_max)
%%
Dn=sqrt(filter(ones(1,LEN_max(end)),1,a.*a));
%
a(P(1)-LEN_max(end):P(1)+1)
m=double(a(P(1)-LEN_max(end)+1:P(1)))
mm=filter(fliplr(m),1,a)./Dn;
find(mm==sqrt(m*m')),[P(1),N-1]
%
a(end-LEN_max(end)-1:end)
M=double(a(end-LEN_max(end)-1:end-1))
MM=filter(fliplr(M),1,a)./Dn;
find(MM==sqrt(M*M'))