我正在运行一个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;。
因此,有人知道我做错了什么吗?或者也欢迎任何提示。
提前致谢, 欢呼声
答案 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中的虚构单元。