gongdadeniupai 发表于 2007-12-31 12:50

for 循环时不执行初值以外的数值如何解决

我已经定义了一个函数myr=myr(eksitonmid),其中myr和eksitonmid都是维数为v2的列向量。然后又定义了一个二分法的程序,程序如下:
function y=erfen(e1,e2,esp)
global eksitonmid
fi=';
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);
fori=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 编辑 ]

gongdadeniupai 发表于 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=';
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;

eight 发表于 2007-12-31 13:38

自己设置断点调试一下即可解决

gongdadeniupai 发表于 2007-12-31 14:37

什么叫断点调试,能稍微指点下吗,谢版主,我是新手

花如月 发表于 2007-12-31 15:16

回复 #4 gongdadeniupai 的帖子

这个问题看书会更容易理解些

eight 发表于 2007-12-31 16:01

原帖由 gongdadeniupai 于 2007-12-31 14:37 发表 http://www.chinavib.com/forum/images/common/back.gif
什么叫断点调试,能稍微指点下吗,谢版主,我是新手
在置顶帖中找答案

gongdadeniupai 发表于 2007-12-31 16:58

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

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

[ 本帖最后由 eight 于 2007-12-31 19:11 编辑 ]
页: [1]
查看完整版本: for 循环时不执行初值以外的数值如何解决