【发布时间】:2016-07-23 02:22:23
【问题描述】:
我有一段带有 while 循环的代码。这个循环在某些情况下会发散,因此会产生一个无限循环。
我想检查循环是否发散,并以优雅高效的过程打破循环。
对此的解决方案是检查循环的每个输出,将其保存,并将其与之前计算的循环输出进行比较。
这是代码:
ai = 0;
ai_old = 100;
iteration = 0;
CDeff = 0;
while abs(ai - ai_old)>2*10^-1 % Get induced angle of attack
iteration = iteration +1;
ai_old = ai;
Cleff = (Clp * cosd(ai)^2 + CDeff * sind(ai) )/cosd(ai);
Veff = Vp/cosd(ai);
Re_eff = Reinf * Veff/Vinf * cp/c;
Meff = Mp/cosd(ai);
if iteration ==1
AFdata(:,2) = AFdata(:,2)/cosd(SweepQC);
end
[~,a_eff,CDeff] = obj.ConstantVortex(AFdata,[],Cleff,Meff);
ai = -a_eff + (AOA + Twists(zz))/cosd(SweepQC);
end
这里,ai 是用函数obj.ConstantVortex 计算的,并与之前计算的ai 进行比较。当差值足够小时终止while循环。
但是,初始ai 和计算出的ai 之间的差异可能会随着每次迭代而增加。
我该如何检查?并相应地打破循环?
谢谢
【问题讨论】:
标签: matlab loops while-loop