Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如果有其他声明?_Matlab_If Statement_Matrix_Matrix Multiplication - Fatal编程技术网

Matlab 如果有其他声明?

Matlab 如果有其他声明?,matlab,if-statement,matrix,matrix-multiplication,Matlab,If Statement,Matrix,Matrix Multiplication,我试图使用以下方程式计算9x1阵列的Ct值。我已编辑我的问题以显示我的当前代码: % Inputs R=0.4; % Radius of Rotor B=3; % Number of blades V=2; % Fluid velocity Rh

我试图使用以下方程式计算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
%输入
R=0.4;%转子半径
B=3;%叶片数
V=2;%流体速度
Rho=998;%流体密度
N=9;%叶片元件的数量
Cp_估计值=0.5;%估计功率系数
Alpha_设计=4;%设计阿尔法
Cl_设计=1;%设计升力系数
%变数
TSR=1;%初始叶尖速比
Cp=0;%初始功率系数
i=1;%柜台
alpha_new=0;%alpha new的初始值
轴向感应=0;%初始轴向感应系数
公差=0.01;%公差值
检查=1;%初始检查值
轴向感应系数=0;%旧轴向感应系数的初始值
Cl=[1.3;1.1;1;0.9;0.86;0.83;0.8;0.75;0.5];%升力系数
Cd=[0.027;0.024;0.02;0.019;0.018;0.016;0.013;0.012;0.01];%阻力系数
r_local=r/N*(1:9)';
r_over_r=r_local/r;
对于TSR=1:10%的TSR,从1到10
调度(TSR)
检查=1;
Cp=0;
而abs(检查)>=公差
TSR_local=r_over_.*TSR;
Phi=(2/3)*atan(1./TSR_本地);
C=((8*pi.*r_局部)。/(B.*Cl_设计)).*(1-cos(Phi));
西格玛=(B*C)。/(pi.*r_local.*2);
轴向感应=1./((4.*(sin(Phi)。^2))./(sigma.*Cl_设计.*cos(Phi))+1);
角感应=(1-(3*轴向感应))/(4*轴向感应)-1);
轴向感应=轴向感应;
TSR_local=TSR.*(r_local./r);%局部叶尖速比
Phi=(2/3)。*atan(1./TSR_本地);%相对流体角
相对风=atan((1-轴向风感应)。/(1+角度风感应)。*TSR);
F=(2/pi)。*acos(exp(-((B/2)。*(1-(ru超过ru))。/((ru超过ru)。*sin(相对风()()));%叶尖损失系数
C_T=(σ*((1-轴向_感应)。^2)。*((Cl.*cos(相对_风))+(Cd.*sin(相对_风)))。/((sin(相对风))。^2);
对于i=1:长度(C_T)
如果C_T(i)0.96
轴向感应(i)=1./((4.*F.*cos(相对风))./(σ.*Cl))-1);
终止
终止
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=总和(D);
Diff=轴向感应-轴向感应;
检查=最大值(差异(:);
终止
存储φ(:,TSR)=φ;
存储_TSR_local(:,TSR)=TSR_local;
存储轴向感应(:,TSR)=轴向感应;
存储角感应(:,TSR)=角感应;
存储相对风(:,TSR)=相对风;
存储检查(:,TSR)=检查;
存储差异(:,TSR)=差异;
存储_Cp(:,TSR)=Cp;
存储_TSR(:,TSR)=TSR;
终止

正如u所示,轴向感应的方程式根据计算的CT值是否大于或小于0.96而变化。但是,我不确定我的if-else语句,因为它似乎不起作用?有人能帮我吗?

如果您想将9x1矩阵中的每个数字与0.96进行比较,您需要一个
for
循环。如果您考虑到
C\u 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;
i=1时的
:长度(C_T)
如果C_T(i)0.96
轴向感应(i)=1/((4*F(i)*cos(相对风(i))/(σ(i)*Cl(i)))-1);
终止
终止

对于循环方法,请查看

您可以像这样对代码的这一部分进行矢量化,这看起来与您最初拥有的非常接近-

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
轴向感应1=1./(1+(4.*F.*(sin(相对风)。^2))。/(sigma.*Cl.*cos(相对风));
轴向感应2=1./((4.*F.*cos(相对风))./(σ.*Cl))-1);

cond1=C_T如果
C_T=0.96
,该怎么办?这种情况不会发生吗?或者在这种情况下什么都不做?否则,我们需要研究你的实际数学方程。谢谢你的回复,我已经更改了CT=0.96事件的代码。然而,我想知道我的if语句写得是否正确,因为我还是Matlab的新手,程序似乎忽略了它?C_T不是一个单一的数字,对吗?它是一个9x1
数字向量?是的,它是一个9x1数字向量。我在if else声明中也收到警告,说CT可能由非标度操作员设置。有什么想法吗?那么,如果
size(C\T)
9,1
,你怎么能将其与单个数字进行比较呢?使用
any(C\u T<0.96)
,或通过
C\u T
中的每个元素计算
轴向感应(i)
。取决于你的问题谢谢你的回答。我试过你的建议,下面是我的代码:对于I=1:长度(C_T),如果C_T(I)0.96轴向_感应(I)=1./((4.*F.*cos(相对风))/(sigma.*Cl))-1);end end然而,在您建议的代码的第三行中,我现在得到一个错误,该错误表示:A(i)=B,B和i中的元素数必须相同。@Kevin如果您能用变量的大小编辑您的问题,我想会有帮助。@Kevin这对我很有用。哪种尺寸有轴向感应?我已经编辑了我的问题以显示我的当前代码。轴向感应是一个9x1矩阵