我使用以下简单代码检查MATLAB中elseif命令的属性:

x = 10;
if x < 0
   y = x;
elseif 0 <= x < 2
   y = 3*x;
elseif x >= 2
   y = 8*x;
end
y


我本来希望自80以来的结果是x >= 2。但是,出乎意料的事情发生了!结果是30,而不是80

但为什么?有任何想法吗?

更新:当我将代码(按照答案中的建议)更改为

x = 10;
if x < 0
   y = x;
elseif (0 <= x) && ( x < 2 )
   y = 3*x;
elseif x >= 2
   y = 8*x;
end
y


我得到预期的80。正是这种双重条件使我无法接受。

最佳答案

当你写

if 0 <= x < 2


你真的在写(没有意识到)

if (0 <= x) < 2


评估为

if (true) < 2


这是正确的,因为true的值为1

所以这是逐行发生的事情:

x = 10;            % x is set to 10
if x < 0           % false
   y = x;          % not executed
elseif 0 <= x < 2  % condition is (true) < 2, thus true
   y = 3*x;        % y is set to 3*x, i.e. 30
elseif x >= 2      % since we already passed a condition, this is not evaluated
   y = 8*x;        % skipped
end                % end of composite if
y                  % display the value of y - it should be 30


顺便说一句,当使用标量时,应该真正使用&&运算符,而不是&运算符。例如参见What's the difference between & and && in MATLAB?

关于matlab - MatLab环境中的if语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23726471/

10-10 18:40
查看更多