2016-07-03 3 views
-1

"hi Dieses Programm in Matlab lesen zwei Eingabedatei (file.txt und file2.txt), die 80000 Zufallszahl hat, wenn ich das folgende Programm ausführen Es hat Fehler (Index außerhalb der Grenzen (Wert 1 außerhalb von 0 in Matlab). Ich kann diesen Fehler nicht beheben. Ich brauche deine Hilfe. "Index außerhalb der Grenzen; Wert 1 außerhalb der Grenze 0 in Matlab

clear all 
close all 
rel=textread('file.txt'); 
ct=textread('file2.txt'); 
bh0=zeros(256,20000); 
bh1=zeros(256,20000); 
Te2=[99 124 119 123 242 107 111 197]; 
for i=1:20000 

    m(i)=bitxor(ct(16*(i-1)+1),180); 
    if m(i)==Te2(1)|m(i)==Te2(2)|m(i)==Te2(3)|m(i)==Te2(4)|m(i)==Te2(5)|m(i)==Te2(6)|m(i)==Te2(7)|m(i)==Te2(8) 
     bh0(m(i)+1,i)=rel(1+4*(i-1)); 
    else 
     bh1(m(i)+1,i)=rel(1+4*(i-1)); 
    end 
end 

for k=1:256 
    counter=1; 
    for i=1:20000 
     if bh0(k,i)~=0 
      bh0_final(k,counter)=bh0(k,i); 
      counter=counter+1; 
     end 
    end 
end 
for k=1:256 
    counter=1; 
    for i=1:20000 
     if bh1(k,i)~=0 
      bh1_final(k,counter)=bh1(k,i); 
      counter=counter+1; 
     end 
    end 
end 

for i=1:20000 
    ciphertext0(i)=ct(16*(i-1)+1); 
    reload0(i)=rel(1+4*(i-1)); 
end 
sum_c0=zeros(20000,256); 
for i=1:20000 
    for j=1:256 
     if ciphertext0(i)==j 
      sum_c0(i,j)=reload0(i); 
     end 
    end 
end 

counterr=zeros(1,256); 
summ=zeros(1,256); 
for i=1:20000 
    for k=1:256 
     if sum_c0(i,k)~=0 
     counterr(k)=counterr(k)+1; 
     summ(k)=summ(k)+sum_c0(i,k); 
     end 
    end 
end 
for k=1:256 
    mean(k)=summ(k)/counterr(k); 
end 
var=zeros(1,256); 
for i=1:20000 
    for k=1:256 
     if sum_c0(i,k)~=0 
      var(k)=((sum_c0(i,k)-mean(k))^2)/counterr(k); 
     end 
    end 

end 
+2

Eigentlich lesen Sie den vollständigen Fehler und darüber nachdenken, was es sagt. Matlabs Fehlermeldungen sind sehr nützlich. Es wird Ihnen sagen, welche Anweisung den Fehler verursacht, was es viel einfacher macht, das Problem zu lösen. – David

+0

Ohne das Lesen des Codes könnte das Problem von leeren Matrizen sein? Dass Sie eine 0-mal-1-Matrix anstelle einer 1-mal-0-Matrix oder etwas ähnliches haben? Abgesehen davon ist es eigentlich ziemlich schwer zu sagen, warum Sie einen Fehler außerhalb der Grenzen bekommen. Darf ich den [Debugger] vorschlagen (http://se.mathworks.com/help/matlab/debugging-code.html)? – patrik

Antwort

0

nur um den Code zu lesen, ich vermute, etwas in dieser Linie

m(i)=bitxor(ct(16*(i-1)+1),180); 

geschieht ct eine Länge 80000 so für i sollte = 20000 kann sagen, dass es bei ct prüft (19999 * 16 + 1) - out of bounds

Verwandte Themen