声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1280|回复: 6

[编程技巧] for 循环时不执行初值以外的数值如何解决

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

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

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

x
我已经定义了一个函数myr=myr(eksitonmid),其中myr和eksitonmid都是维数为v2的列向量。然后又定义了一个二分法的程序,程序如下:
function y=erfen(e1,e2,esp)
global eksitonmid
fi=[0:1e-4:3e-4]';
v2=length(fi);
p=zeros(v2,1);
q=zeros(v2,1);
for i=1:v2
    p(i)=e1;
    q(i)=e2;
end
pp=myr(p);
qq=myr(q);
eksitonmid=zeros(v2,1);
for  i=1:v2
    if pp(i)*qq(i)<0
        k=1;
        while abs(e1-e2)>esp
              eksitonmid(i)=e1/2+e2/2;
              rr=myr(eksitonmid);
              if rr(i)==0
                 return
              elseif sign(pp(i))==sign(rr(i))
                 e1=eksitonmid(i);
                 eksitonmid(i)=e1/2+e2/2;
              elseif sign(qq(i))==sign(rr(i))
                 e2=eksitonmid(i);
                 eksitonmid(i)=e1/2+e2/2;
              end
        k=k+1;
        end
   end
end
为什么i=1:v2,但每次迭代的结果都是只执行i=1的情况,而后面的i=2到v2都不执行,请高人赐教。

[ 本帖最后由 eight 于 2007-12-31 13:39 编辑 ]
回复
分享到:

使用道具 举报

 楼主| 发表于 2007-12-31 12:52 | 显示全部楼层

补充关于myr的定义程序

function myr=myr(eksitonmid)
%global m fi v2
format long
N=0;
b=0.3;
h=0.5;
n=500;
as=2e-2;
ass=2e-2;
d1=2e-2;
d2=1.2e-2;
As=1000;
Ass=0;
eksitonc=-1.64e-3;
eksitont=8.1e-5;
afa=2.03;
afd=1.36;
aft=0.7;
fc=-14.3;
ft=1.5;
fy=300;
Es=2e5;
zi=[-(h/2-h/n/2):h/n:(h/2-h/n/2)];
v1=length(zi);
fi=[0:1e-4:3e-4]';
v2=length(fi);
eksitonmidd=zeros(v2,v1);
for i=1:v2
     eksitonmidd(i,1:v1)=eksitonmid(i);
end
eksiton=eksitonmidd-fi*zi;
sigmac=zeros(v2,v1);
for i=1:v2;
    for j=1:v1;
        if eksiton(i,j)>0.00015
            sigmac(i,j)=0;
        elseif eksiton(i,j)>eksitont
            sigmac(i,j)=ft*(eksiton(i,j)/eksitont)/(aft*(eksiton(i,j)/eksitont-1)^1.7+(eksiton(i,j)/eksitont));
        elseif eksiton(i,j)>0
            sigmac(i,j)=ft*(1.2*(eksiton(i,j)/eksitont)-0.2*(eksiton(i,j)/eksitont)^6);
        elseif eksiton(i,j)==0
            sigmac(i,j)==0;
        elseif eksiton(i,j)>=eksitonc
            sigmac(i,j)=fc*(afa*(eksiton(i,j)/eksitonc)+(3-2*afa)*(eksiton(i,j)/eksitonc)^2+(afa-2)*(eksiton(i,j)/eksitonc)^3);
        elseif eksiton(i,j)>=-3.3e-3
            sigmac(i,j)=fc*(eksiton(i,j)/eksitonc)/(afd*(eksiton(i,j)/eksitonc-1)^2+(eksiton(i,j)/eksitonc));
        else
            sigmac(i,j)=0;
            break
            disp('over');
        end
    end
end
         eksiton;
         sigmac;
eksitonsla=eksitonmid+fi*(h/2-as-d1/2);
eksitonsya=eksitonmid-fi*(h/2-ass-d2/2);
sigmasla=zeros(v2,1);
sigmasya=zeros(v2,1);
for i=1:v2
     if eksitonsla(i)>fy/Es
        sigmasla(i)=fy;
     elseif eksitonsla(i)<-fy/Es
        sigmasla(i)=-fy;
     else
        sigmasla(i)=eksitonsla(i)*Es;
     end
end
for i=1:v2
     if eksitonsya(i)>fy/Es
        sigmasya(i)=fy;
     elseif eksitonsya(i)<-fy/Es
        sigmasya(i)=-fy;
     else
        sigmasya(i)=eksitonsya(i)*Es;
     end
end
F=(sigmasla*As+sigmasya*Ass)/1000;
C=1000*sum(sigmac,2)*(b*(h/n));              
myr=F+C-N;
v=(-zi)';
m=1000*(b*(h/n))*(sigmac*v)+(sigmasla*As*(h/2-as-d1/2)-sigmasya*Ass*(h/2-ass-d2/2))/1000;
fid = fopen('exp1.txt','wt');
fprintf(fid,'%6.2f\n',m);
fclose(fid);
fid = fopen('exp2.txt','wt');
fprintf(fid,'%12.8f\n',fi);
fclose(fid);
eksitonmid
eksitonmidd;
eksiton;
m
myr;
eksitonsla;
发表于 2007-12-31 13:38 | 显示全部楼层
自己设置断点调试一下即可解决
 楼主| 发表于 2007-12-31 14:37 | 显示全部楼层
什么叫断点调试,能稍微指点下吗,谢版主,我是新手
发表于 2007-12-31 15:16 | 显示全部楼层

回复 #4 gongdadeniupai 的帖子

这个问题看书会更容易理解些
发表于 2007-12-31 16:01 | 显示全部楼层
 楼主| 发表于 2007-12-31 16:58 | 显示全部楼层

已经断点调试后,还是发现不了问题所在

我已经用断点判断到i=1正常执行完后,程序以后便出现3个end后就结束了。本该执行i=2及以后的,实在弄不懂,我已经苦想了很久了,求大家看看到底哪里可能会是问题根源。

[ 本帖最后由 eight 于 2007-12-31 19:11 编辑 ]
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-12 07:23 , Processed in 0.065495 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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