creating while loop for two different variable

3 ビュー (過去 30 日間)
mehmet salihi
mehmet salihi 2021 年 12 月 6 日
回答済み: Halima AlAnsari 2022 年 5 月 27 日
I am trying to create while or for loop but i could not point out the logic becase i have two variables for each iteration that they are chaning each loop and each iteration
a and a_prime are changing in each loop and the next loop will use the previous a and a_prime as old ones.
my third manual iterations are here. could you please help me to put it into the loop to achive the condition
condition is
a - a_old < epsilon
a - a_prime_old < epsilon
clear
clc
%%%%% when delta_a and delta_a_prime is less than epsilon get out the loop
R = 31 ; % Blade Radius in meter
B = 3 ; % Number of Blades
Rho = 1.225 ; % Density of air kg/m3
V0 = 8 ; % Wind Speed m/s
w = 2.61 ; % Rotational Speed rad/s
Theta_P = -3 ; % Tip Pitch Angle in degree
Chord = 0.5 ; % chordwise
Beta = 2 ; % Local Twist Angle in degree
Cl = 0.5 ; % Constant for this example
Cd = 0.01 ; % Constant for this example
r = 24.5 ; % Local Radius in meter
ac = 0.2 ;
epsilon = 5.0000e-05 ;
%%%%%%%%%%%%%%%%%%%%% Process
a_old = 0 ; % axial induction factor
a_prime_old = 0 ; % Tangential induction factor
save_a = [a_old] ;
save_a_prime = [a_prime_old] ;
% % % % iter 1
disp('iter 1')
disp(' ')
Phi = atand(((1-a_old)*V0)/((1+a_prime_old)*w*r)); % Flow Angle
Theta = Beta + Theta_P ;
Alpha = Phi - Theta ; % local angle of attack in degree
f = (B/2)* ((R-r)/(r*sind(Phi)));
F = (2/pi)*acos(exp(-f)); % Prandtl correction factor
Cn = Cl*cosd(Phi)+Cd*sind(Phi);
Ct =Cl*sind(Phi)-Cd*cosd(Phi);
sigma = (B*Chord)/(2*pi*r);
K=(4*F*(sind(Phi))^2)/(sigma*Cn);
%%%%%%%%%% a and ac condition
a1 = 1/(((4*F*(sind(Phi)^2))/(sigma*Cn))+1);
if a1 < ac || a1==ac
a1=a1;
else
a1 = 0.5*(2+K*(1-2*ac)-sqrt(((K*(1-2*ac)+2)^2)+4*((K*(ac^2))-1)));
end
a1_prime =1/(((4*F*(sind(Phi)*cosd(Phi)))/(sigma*Ct))-1);
save_a = [save_a a1];
save_a_prime = [save_a_prime a1_prime];
delta_a=a1-a_old
delta_a_prime=a1_prime-a_prime_old
disp(' ')
disp('iter 2')
% % % % iter 2
Phi = atand(((1-a1)*V0)/((1+a1_prime)*w*r)); % Flow Angle
Theta = Beta + Theta_P ;
Alpha = Phi - Theta ; % local angle of attack in degree
f = (B/2)* ((R-r)/(r*sind(Phi)));
F = (2/pi)*acos(exp(-f)); % Prandtl correction factor
Cn = Cl*cosd(Phi)+Cd*sind(Phi);
Ct =Cl*sind(Phi)-Cd*cosd(Phi);
sigma = (B*Chord)/(2*pi*r);
K=(4*F*(sind(Phi))^2)/(sigma*Cn);
%%%%%%%%%% a and ac condition
a2 = 1/(((4*F*(sind(Phi)^2))/(sigma*Cn))+1);
if a2 < ac || a2==ac
a2=a2;
else
a2 = 0.5*(2+K*(1-2*ac)-sqrt(((K*(1-2*ac)+2)^2)+4*((K*(ac^2))-1)));
end
a2_prime =1/(((4*F*(sind(Phi)*cosd(Phi)))/(sigma*Ct))-1);
save_a = [save_a a2];
save_a_prime = [save_a_prime a2_prime];
delta_a=a2-save_a(2)
delta_a_prime = a2_prime - save_a_prime(2)
disp(' ')
disp('iter 3')
% % % % iter 3
Phi = atand(((1-a2)*V0)/((1+a2_prime)*w*r)); % Flow Angle
Theta = Beta + Theta_P ;
Alpha = Phi - Theta ; % local angle of attack in degree
f = (B/2)* ((R-r)/(r*sind(Phi)));
F = (2/pi)*acos(exp(-f)); % Prandtl correction factor
Cn = Cl*cosd(Phi)+Cd*sind(Phi);
Ct =Cl*sind(Phi)-Cd*cosd(Phi);
sigma = (B*Chord)/(2*pi*r);
K=(4*F*(sind(Phi))^2)/(sigma*Cn);
%%%%%%%%%% a and ac condition
a3 = 1/(((4*F*(sind(Phi)^2))/(sigma*Cn))+1);
if a3 < ac || a3==ac
a3=a3;
else
a3 = 0.5*(2+K*(1-2*ac)-sqrt(((K*(1-2*ac)+2)^2)+4*((K*(ac^2))-1)));
end
a3_prime =1/(((4*F*(sind(Phi)*cosd(Phi)))/(sigma*Ct))-1);
save_a = [save_a a3]
save_a_prime = [save_a_prime a3_prime];
delta_a=a3-save_a(3)
delta_a_prime = a3_prime - save_a_prime(3)

採用された回答

Walter Roberson
Walter Roberson 2021 年 12 月 6 日
while delta_a > epsilon || delta_a_prime > epsilon

その他の回答 (1 件)

Halima AlAnsari
Halima AlAnsari 2022 年 5 月 27 日
Hi, can you share with me the code if you have already finalize ?

カテゴリ

Help Center および File ExchangeLoops and Conditional Statements についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by