Matlab while 循环 如何退出

clear%下面为输入基本数据Hm=2500;%⑤点最高高度Hn=1700;%⑤点最低高度A5=83*pi/180;%计算A角时的初始赋值B2=702;B3=320;L1... clear
%下面为输入基本数据
Hm=2500;%⑤点最高高度
Hn=1700;%⑤点最低高度
A5=83*pi/180;%计算A角时的初始赋值
B2=702;
B3=320;
L1=1230;
L2=1330;
L3=1000;
L4=400;
L5=560;
%下面为各点坐标计算公式,以左下角点为(0,0)
X1=L5;Y1=B3;
%以⑤点进行高度循环,从2500降到1700时(步长为-100),利用华罗庚的0.618优选法建数学模型,计算A角的对应值
%下面数学模型已建立,不知如何编制循环语句,将A角求出。
for Z=[Hm:-100:Hn]
A6=6*pi/180;G=0.01;
A7=A5-A6;
while 1
A=A5-0.618*(A5-A7);
X2=X1+L1*cos(A);Y2=B3+L1*sin(A);
X4=0;Y4=B2;
L0=sqrt((X2-X4)^2+(Y2-B2)^2);%L0为辅助计算线
A8=acos((L0^2+L2^2-L4^2)/(2*L0*L2))*pi/180;
A9=atan((Y2-B2)/(X2-X4))*pi/180;
A2=A8+A9;
X3=L2*cos(A2);Y3=L2*sin(A2)+B2;
A1=atan((Y3-Y2)/(X2-X3))*pi/180;%A1为L3线的水平夹角
X5=X2-(L3+L4)*cos(A1);Y5=Y2+(L3+L4).*sin(A1);
FH=Y5-Z;
if FH>G
A5=A;
end
continue;%返回到A=A5-0.618*(A5-A7);
if FH<-G
A7=A;
end
continue;%返回到A=A5-0.618*(A5-A7);
if abs(FH)<G
disp([Z,A*180/pi]);%结束一次,将所要高度与对应角度打出
A5=A;%为减少计算次数,将A赋值给A5
end
break
end
end
我已解决,将A定义成符号变量,直接将A角求出来了,只是计算量大了。
展开
 我来答
求雅韵Fv
推荐于2018-03-12 · TA获得超过411个赞
知道小有建树答主
回答量:135
采纳率:100%
帮助的人:209万
展开全部
主要添加代码,记录循环次数

count=count+1; %循环次数+1
if count>10000 %循环次数过多,强制退出
break
end

强制跳出循环,从运行结果看,还是一个死循环。所以还要检查自己的判断条件。
更改了你的continue,break位置。自己看一下注释

clear
clc

%下面为输入基本数据
Hm=2500;%⑤点最高高度
Hn=1700;%⑤点最低高度
A5=83*pi/180;%计算A角时的初始赋值
B2=702;
B3=320;
L1=1230;
L2=1330;
L3=1000;
L4=400;
L5=560;

%下面为各点坐标计算公式,以左下角点为(0,0)
X1=L5;Y1=B3;
%以⑤点进行高度循环,从2500降到1700时(步长为-100),利用华罗庚的0.618优选法建数学模型,计算A角的对应值
%下面数学模型已建立,不知如何编制循环语句,将A角求出。

for Z=Hm:-100:Hn

A6=6*pi/180;G=0.01;
A7=A5-A6;

count=0;%测试循环次数,检查是否为死循环

while 1

count=count+1; %循环次数+1
if count>10000 %循环次数过多,强制退出
break
end

A=A5-0.618*(A5-A7);

X2=X1+L1*cos(A);
Y2=B3+L1*sin(A);
X4=0;
Y4=B2;

L0=sqrt((X2-X4)^2+(Y2-B2)^2);%L0为辅助计算线
A8=acos((L0^2+L2^2-L4^2)/(2*L0*L2))*pi/180;
A9=atan((Y2-B2)/(X2-X4))*pi/180;
A2=A8+A9;
X3=L2*cos(A2);
Y3=L2*sin(A2)+B2;
A1=atan((Y3-Y2)/(X2-X3))*pi/180;%A1为L3线的水平夹角
X5=X2-(L3+L4)*cos(A1);Y5=Y2+(L3+L4).*sin(A1);
FH=Y5-Z;

%满足条件,跳出本次循环1
if FH>G
A5=A;
continue;%返回到A=A5-0.618*(A5-A7);
end

%满足条件,跳出本次循环2
if FH<-G
A7=A;
continue;%返回到A=A5-0.618*(A5-A7);
end

if abs(FH)<G
disp([Z,A*180/pi]);%结束一次,将所要高度与对应角度打出
A5=A;%为减少计算次数,将A赋值给A5
break%跳出 while 所有循环
end

% break 位置不对
% break%跳出所有循环
end
end
逃课de小屁孩
推荐于2018-03-12 · 我现在,干啥啥不行,吃饭第一名。干啥啥不行,逃课第一名。哎,...
逃课de小屁孩
采纳数:173 获赞数:563

向TA提问 私信TA
展开全部

参考

对于退出循环, 如果可以使用break

或者使用 套用判断语句IF  通过if改变循环的次序I的值。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ec39437d4
推荐于2016-11-23 · TA获得超过225个赞
知道小有建树答主
回答量:495
采纳率:0%
帮助的人:307万
展开全部
通过break 跳出当前的循环通过continue执行当前的循环 end指if或for的结束就相当中括号
哥们你的算法有问题的 一直是同一个值
再好好看看算法吧
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式