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 编辑 ]
补充关于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; 自己设置断点调试一下即可解决 什么叫断点调试,能稍微指点下吗,谢版主,我是新手
回复 #4 gongdadeniupai 的帖子
这个问题看书会更容易理解些 原帖由 gongdadeniupai 于 2007-12-31 14:37 发表 http://www.chinavib.com/forum/images/common/back.gif什么叫断点调试,能稍微指点下吗,谢版主,我是新手
在置顶帖中找答案
已经断点调试后,还是发现不了问题所在
我已经用断点判断到i=1正常执行完后,程序以后便出现3个end后就结束了。本该执行i=2及以后的,实在弄不懂,我已经苦想了很久了,求大家看看到底哪里可能会是问题根源。[ 本帖最后由 eight 于 2007-12-31 19:11 编辑 ]
页:
[1]