簡體   English   中英

if-else語句?

[英]If-else statement?

我正在嘗試使用以下方程式計算9x1數組的Ct值。 我已編輯問題以顯示當前代碼:

% Inputs
R=0.4;                                          % Radius of Rotor
B=3;                                            % Number of blades
V=2;                                            % Fluid velocity
Rho=998;                                        % Fluid Density
N=9;                                            % Number of Blade Elements
Cp_estimate=0.5;                                % Estimate power coefficient
Alpha_design=4;                                 % Design alpha
Cl_design=1;                                    % Design lift coefficient

% Variables
TSR=1;                                          % Initial tip speed ratio
Cp=0;                                           % Initial power coefficient
i=1;                                            % Counter
alpha_new=0;                                    % Initial value for alpha new
axial_induction=0;                              % Initial axial induction factor
tolerance=0.01;                                 % Tolerance Value
Check=1;                                        % Initial check value
axial_induction_old=0;                          % Initial value for old axial induction factor

Cl=[1.3; 1.1; 1; 0.9; 0.86; 0.83; 0.8; 0.75; 0.5];                                          % Lift Coefficients
Cd=[0.027; 0.024; 0.02; 0.019; 0.018; 0.016; 0.013; 0.012; 0.01];                           % Drag Coefficients

r_local=R/N*(1:9)';
r_over_R=r_local / R;


for TSR=1:10                                     % TSR from 1 to 10
  disp(TSR)                                                                    
  Check=1;
  Cp=0;   

  while abs(Check)>=tolerance
    TSR_local=r_over_R .* TSR;

    Phi=(2/3)*atan(1./TSR_local);
    C=((8*pi.*r_local) ./ (B.*Cl_design)).*(1-cos(Phi));
    sigma=(B*C) ./ (pi.*r_local.*2);

    axial_induction= 1 ./ (((4.*(sin(Phi).^2)) ./ (sigma.*Cl_design.*cos(Phi)))+1);
    angular_induction= (1-(3*axial_induction)) ./ ((4.*axial_induction)-1);

    axial_induction_old = axial_induction;        
    TSR_local = TSR .* (r_local./R);                                                                 % Local Tip Speed Ratio
    Phi = (2/3) .* atan(1./TSR_local);                                                               % Angle of Relative Fluid

    relative_wind = atan((1-axial_induction) ./ ((1+angular_induction) .* TSR));

    F=(2/pi) .* acos(exp(-(((B/2) .* (1-(r_over_R))) ./ ((r_over_R) .* sin(relative_wind)))));      % Tip Loss Factor

    C_T=(sigma .* ((1-axial_induction).^2) .* ((Cl.*cos(relative_wind))+(Cd.*sin(relative_wind)))) ./ ((sin(relative_wind)).^2);

    for i=1:length(C_T)
      if C_T(i)<=0.96
        axial_induction(i)=1 ./ (1+(4.*F.*(sin(relative_wind).^2)) ./ (sigma.*Cl.*cos(relative_wind))); 
      elseif C_T(i)>0.96
        axial_induction(i)=1 ./ (((4.*F.*cos(relative_wind)) ./ (sigma.*Cl))-1);
      end
    end

    D=(8./(TSR.*N)).*(F.*(sin(Phi).^2).*(cos(Phi)-((TSR_local).*(sin(Phi)))).*(sin(Phi)+((TSR_local).*(cos(Phi)))).*(1-(Cd./Cl).*atan(Phi)).*(TSR_local.^2));
    Cp=sum(D);

    Diff=axial_induction-axial_induction_old;
    Check=max(Diff(:));

  end

  store_Phi(:,TSR)=Phi;
  store_TSR_local(:,TSR)=TSR_local;
  store_axial_induction(:,TSR)=axial_induction;
  store_angular_induction(:,TSR)=angular_induction;
  store_relative_wind(:,TSR)=relative_wind;
  store_Check(:,TSR)=Check;
  store_Diff(:,TSR)=Diff;
  store_Cp(:,TSR)=Cp;
  store_TSR(:,TSR)=TSR;

end

如您所見,軸向感應方程根據計算出的CT值是大於還是小於0.96而變化。 但是我不確定我的if else語句是否奏效? 有人可以幫我嗎?

如果要將9x1矩陣中的每個數字都與0.96進行比較,則需要一個for循環。 如果您考慮C_T也可以為0.96的可能性,它將簡化為

for i=1:length(C_T)
   if C_T(i) <= 0.96;
      axial_induction(i) = 1 / (1+(4*F(i)*(sin(relative_wind(i))^2)) / (sigma(i)*Cl(i)*cos(relative_wind(i)))); 
   else % C_T(i) > 0.96
      axial_induction(i) = 1 / (((4*F(i)*cos(relative_wind(i))) / (sigma(i)*Cl(i)))-1);
   end;
end;

對於循環方法,請查看解決方案

您可以像這樣將向量的這部分代碼矢量化,這看起來與您最初的代碼很接近-

axial_induction1 = 1 ./ (1+(4.*F.*(sin(relative_wind).^2)) ./ (sigma.*Cl.*cos(relative_wind)));
axial_induction2 = 1 ./ (((4.*F.*cos(relative_wind)) ./ (sigma.*Cl))-1);
cond1 = C_T<=0.96
axial_induction = cond1.*axial_induction1 + ~cond1.*axial_induction2

希望這對你有用!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM