Ich habe Stück Code mit einer While-Schleife. Diese Schleife wird unter bestimmten Bedingungen divergieren und somit eine Endlosschleife ergeben.MATLAB: Überprüfen Sie auf While-Schleife Divergenz
Ich möchte überprüfen, ob die Schleife divergierend ist und die Schleife in einem eleganten und effizienten Verfahren unterbrechen.
Eine Lösung besteht darin, jeden Ausgang der Schleife zu prüfen, zu speichern und mit der zuvor berechneten Schleifenausgabe zu vergleichen.
Dies ist der Code:
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
Hier ai
mit der Funktion berechnet wird obj.ConstantVortex
und mit den zuvor berechneten ai
verglichen. Die while-Schleife wird beendet, wenn die Differenz klein genug ist. Es kann jedoch vorkommen, dass der Unterschied zwischen dem ursprünglichen ai
und dem berechneten ai
mit jeder Iteration zunimmt.
Wie kann ich das überprüfen? und die Schleife entsprechend unterbrechen?
Danke
Hey, ai_prev = Nullen [1 num_prev]; Dies ist ein ungültiger Matlab-Befehl. Auch && all (sign (diff (ai_prev))) ist keine korrekte Definition für eine if-Anweisung, da sie nur eine Zahl und keine Bedingung liefert. –
@BalrajBoyal danke dafür; bearbeitet, um Tippfehler mit Nullen zu korrigieren(). Die Anweisung 'all' gibt eine wahr/falsch-Bedingung zurück, so dass die Anweisung korrekt ausgewertet wird. – mhopeng
@ Mhopeng, Oh Entschuldigung, das war mir nicht bewusst. Vielen Dank! –