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角求出来了,只是计算量大了。 展开
%下面为输入基本数据
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角求出来了,只是计算量大了。 展开
3个回答
展开全部
主要添加代码,记录循环次数
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
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
展开全部
通过break 跳出当前的循环通过continue执行当前的循环 end指if或for的结束就相当中括号
哥们你的算法有问题的 一直是同一个值
再好好看看算法吧
哥们你的算法有问题的 一直是同一个值
再好好看看算法吧
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询