MATLAB:保存循环数据

时间:2015-10-13 15:06:47

标签: matlab loops while-loop

我正在运行一个while循环,我遇到了一些问题。

我有以下代码:

  Angle_int = 0.5;                    % Initial interpolation angle of attack
  Clmax2d(1,1:length(Yle_wing)) = 3;  % Dummy value
  diff = 0;                         % Dummy value

  while sum(diff < 0) > fix(tol*length(Yle_wing))
      Angle_int = Angle_int + 0.5; % Interpolation angle increases with 0.5 with every iteration

          for j = 1:length(Yle_wing)
          CL3d = interp1(Angle,[cl_matrix(1,j)  cl_matrix(2,j) cl_matrix(3,j)],Angle_int,'linear');
          CL_3DD(:,j) = CL3d;
          end  

      diff = (Clmax2d - CL_3DD);     % Difference between Cl2d and Cl3d
      Angle_stall = Angle_int;
      CL_3D = CL_3DD;
  end

出于某种原因,当{while}循环结束时,CL_3D = CL_3DD;Angle_stall = Angle_int;似乎消失了。因此,我无法在while循环之前使用它们的收敛值,因为这些变量无法识别。我收到以下错误:

  

未定义的函数或变量&#34; CL_3D&#34;。

因此,有人知道我做错了什么吗?或者也欢迎任何提示。

提前致谢, 欢呼声

1 个答案:

答案 0 :(得分:1)

错误消息:

  

未定义的函数或变量&#34; CL_3D&#34;。

总是,因为您正在尝试使用尚未初始化的变量或函数。通常这种情况发生在您想要递增计数器的循环中,或者比较值等。

一个常见的错误就是在没有在循环前面写ii = 0的情况下做这样的事情:

while ii < some_num
    ii = ii + 1;
    some_function();
end

使用虚拟变量,您永远不会进入循环(除非tol < 0,这似乎是一个奇怪的选择)。您可能想要初始化diff = Inf或类似的东西。但是,使用diff作为变量名称不是一个好主意,因为it's a builtin function

您可能尝试使用CL_3D,但尚未初始化(代码中的其他位置,而不是您发布的部分)。 MATLAB告诉你错误出现在哪一行,你应该尝试使用它!

也许像zeros(size(Clmax2d));一样初始化它可以工作(它肯定会删除你的错误,但它可能不会产生所需的行为)。

PS!

Using i and j as variables are not recommended因为它们代表了MATLAB中的虚构单元。