Matlab 如果有其他声明?
我试图使用以下方程式计算9x1阵列的Ct值。我已编辑我的问题以显示我的当前代码: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
% 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矩阵