帮我看看我的代码为什么出错
MATLAB代码如下:%x的二进制表示法,seqb.m文件
function B=seqb(x,b)
k=20;%相当于取i=20
b=0;
for r=1:1:(2^k-1)
t=r/2^k;
if x>=t
theta=(-1)^(r-1);
else
theta=0;
end
b=b+theta;
end
B=b;
%加密代码
charL='A novel block crytosystem based on iterating a chaotic map é';
doubleL=double();
P=dec2bin(doubleL);
lenP=length(P);
Q=P(1,:);
for i=2:lenP
Q=;
end
e=64-mod(length(Q),64);
for i=1:e
Q=;
end
L=length(Q);
L=L/64;
Q=reshape(Q,64,[]);
x=246;
x=x/256*0.6+0.2;
d=250; nu=3.85; b=zeros(1,64); c=zeros(1,6); T=[];
for i=1:L %迭代d次
for i=1:d
x=nu.*x.*(1-x);
end
for i=1:64 %迭代64次,生成A
x=nu.*x.*(1-x);
b(1,i)=seqb(x);
end
for i=65:70 %迭代6次,生成A'
x=nu.*x.*(1-x);
c(1,i-64)=seqb(x);
end
d=binvec2dec(c);
t=;
t=xor(t,b(:));
t=num2str(t);
T=;
end
disp(T);
运行会出现错误提示:??? Index exceeds matrix dimensions.
[ 本帖最后由 xsj3917 于 2006-10-31 15:27 编辑 ] 在一位高手的帮助下找到了出错的原因,是如下循环中重复利用i导致溢出
for i=1:L %迭代d次
for i=1:d
x=nu.*x.*(1-x);
end
for i=1:64 %迭代64次,生成A
x=nu.*x.*(1-x);
b(1,i)=seqb(x);
end
for i=65:70 %迭代6次,生成A'
x=nu.*x.*(1-x);
c(1,i-64)=seqb(x);
end
d=binvec2dec(c);
t=;
t=xor(t,b();
t=xor(t,b(:));
t=num2str(t);
T=;
end
disp(T);
可以将最外层循环的i改为j,相应的t=;中的i也改为j即可
教训:循环嵌套时不要用相同的字母 原帖由 xsj3917 于 2006-10-31 16:01 发表
在一位高手的帮助下找到了出错的原因,是如下循环中重复利用i导致溢出
for i=1:L %迭代d次
for i=1:d
x=nu.*x.*(1-x);
end
for i=1:64 %迭代64次,生成A
...
更好的办法是减少使用循环
页:
[1]