'if'语句中的未定义变量

时间:2015-02-14 05:52:46

标签: matlab variables if-statement

我正在编写空气动力学课程的脚本,我收到以下错误:

Undefined function or variable 'dCt_dx'.
Error in Project2_Iteration (line 81)
Ct = trapz(x,dCt_dx)

我不确定原因是什么。这与我的if语句有关。我的脚本如下:

clear all
clc
global dr a n Vinf Vr w rho k x c cl dr B R beta t

%Environmental Parameters
n = 2400; %rpm
Vinf = 154; %KTAS
rho = 0.07647 * (.7429/.9450); %from mattingly for 8kft
a = 1084; %speed of sound, ft/s, 8000 ft
n = n/60; %convert to rps
w = 2*pi*n;
Vinf = (Vinf*6076.12)/3600; %convert from KTAS to ft/s
k = length(c);
dr = R/k; %length of each blade element

for i = 1:k
  r(i) = i*dr - (.5*dr); %radius at center of blade element
  dA = 2*pi*r*dr; %Planform area of blade element
  x(i) = r(i)/R;
  if x(i) > .15 && x(i-1) < .15
    i_15 = i;
  end
  if x(i) > .75 && x(i-1) < .75
    i_75h = i;
    i_75l = i-1;
  end
  Vr(i) = w*r(i) + Vinf;

  %Aerodynamic Parameters
  M = Vr(i)/a;
  if M > 0.9
    M = 0.9;
  end
  m0 = 0.9*(2*pi/(1-M^2)^0.5); %lift-curve slope (2pi/rad)

  %1: Calculate phi
  phi = atan(Vinf/(2*pi*n*r(i)));

  %2: Choose Vo
  Vo = .00175*Vinf;

  %3: Calculate Theta
  theta = atan((Vinf + Vo)/(2*pi*n*r(i)))-phi;

  %4:
  if option == 1
    %calculate cl(i) from c(i)
    sigma = (B*c(i))/(pi*R);
    if sigma > 0
      cl(i) = (8*x(i)*theta*cos(phi)*tan(phi+theta))/sigma;
    else
      cl(i) = 0;
    end
  else %option == 2
    %calculate c(i) from cl(i)
    if cl(i) ~= 0
      sigma = (8*x(i)*theta*cos(phi)*tan(phi+theta))/cl(i);
    else
      sigma = 0;
    end
    c(i) = (sigma*pi*R)/B;
    if c(i) < 0
      c(i) = 0;
    end
  end

  %5: Calculate cd
  cd(i) = 0.0090 + 0.0055*(cl(i)-0.1)^2;

  %6: calculate alpha
  alpha = cl(i)/m0;

  %7: calculate beta
  beta(i) = phi + alpha + theta;

  %8: calculate dCt/dx and dCq/dx
  phi0 = phi+theta;
  lambda_t = (1/(cos(phi)^2))*(cl(i)*cos(phi0) - cd(i)*sin(phi0));
  lambda_q = (1/(cos(phi)^2))*(cl(i)*sin(phi0) + cd(i)*cos(phi0));
  if x(i) >= 0.15
    dCt_dx(i) = ((pi^3)*(x(i)^2)*sigma*lambda_t)/8; %Roskam eq. 7.47, pg. 280
    dCq_dx(i) = ((pi^3)*(x(i)^3)*sigma*lambda_q)/16; %Roskam eq. 7.48, pg 280
  else
    dCt_dx(i) = 0;
    dCq_dx(i) = 0;
  end

  %calculate Mdd
  t(i) = (0.04/(x(i)^1.2))*c(i);
  Mdd(i) = 0.94 - (t(i)/c(i)) - cl(i)/10;
end

%9: calculate Ct, Cq, Cd
Ct = trapz(x,dCt_dx)
Cq = trapz(x,dCq_dx)
D = 2*R;
Q=(rho*(n^2)*(D^5)*Cq)
T=(rho*(n^2)*(D^4)*Ct)

1 个答案:

答案 0 :(得分:0)

当我单步执行您的脚本时,我会看到整个for i = 1:k循环被跳过,因为k=0。您设置k = length(c),但c从未初始化为值,因此长度为零。

因此,dCt_dx永远不会被赋予价值 - 更重要的是,您的大部分脚本永远不会被运行。

如果您将来要使用MATLAB,我真的建议您学习如何做到这一点。这使得查找错误变得容易多了。试着看this video