声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1843|回复: 2

[编程技巧] 帮我看看我的代码为什么出错

[复制链接]
发表于 2006-10-31 12:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
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([charL]);
P=dec2bin(doubleL);
lenP=length(P);

Q=P(1,:);
for i=2:lenP
    Q=[Q P(i,:)];
end
e=64-mod(length(Q),64);
for i=1:e
    Q=[Q 0];
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=[Q(d+1:64,i); Q(1:d,i)];
    t=xor(t,b(:));
    t=num2str(t);
    T=[T t];
end
disp(T);
运行会出现错误提示:??? Index exceeds matrix dimensions.

[ 本帖最后由 xsj3917 于 2006-10-31 15:27 编辑 ]
回复
分享到:

使用道具 举报

 楼主| 发表于 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
        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=[Q(d+1:64,i); Q(1:d,i)];
    t=xor(t,b();
  t=xor(t,b(:));
    t=num2str(t);
    T=[T t];
end
disp(T);
可以将最外层循环的i改为j,相应的t=[Q(d+1:64,i); Q(1:d,i)];中的i也改为j即可
教训:循环嵌套时不要用相同的字母
发表于 2006-10-31 16:19 | 显示全部楼层
原帖由 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
   ...



更好的办法是减少使用循环
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-19 20:23 , Processed in 0.050103 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表