if,elseif,else语句将无法正确执行

时间:2019-03-07 14:39:28

标签: matlab if-statement logical-operators

我目前正在处理一段代码,if, elseif, else语句将无法与我合作。这是非常简单的代码,大多数只是我定义的常量:

K1 = 0.174532925;
K2 = 0.20943951;

y0 = [0.0 15.2161 0.0 0.0];

ieout = [];

if isempty(ieout)
    if y0(1)>K1
        ieout = [ieout 5];
    elseif  K1>y0(1)>-K1 && y0(2)<0
        ieout = [ieout 1];
    elseif -K1>y0(1)>-K2 && y0(2)<0
        ieout = [ieout 2];
    elseif -K1>y0(1)>-K2 && y0(2)>0
        ieout = [ieout 3];
    elseif K1>y0(1)>-K1 && y0(2)>0
        ieout = [ieout 4];
    end
end

现在,我的向量y0的所有zeroz除了在第二个位置为正的位置外,因此这意味着应该执行最后一个elseif语句。情况并非如此,而是执行了最后一个语句之前的语句,并且我的向量ieout获得了标量元素3而不是4

这使我感到困惑,为什么会这样?

1 个答案:

答案 0 :(得分:2)

您不能像1<y<2那样链接逻辑运算符。您必须使用1<y && y<2这样:

K1 = 0.174532925;
K2 = 0.20943951;

y0 = [0.0 15.2161 0.0 0.0];

ieout = [];

if isempty(ieout)
    if y0(1)>K1
        ieout = [ieout 5];
    elseif  K1>y0(1) && y0(1)>-K1 && y0(2)<0
        ieout = [ieout 1];
    elseif -K1>y0(1) && y0(1)>-K2 && y0(2)<0
        ieout = [ieout 2];
    elseif -K1>y0(1) && y0(1)>-K2 && y0(2)>0
        ieout = [ieout 3];
    elseif K1>y0(1) && y0(1)>-K1 && y0(2)>0
        ieout = [ieout 4];
    end
end