если, elseif, оператор else не будет выполняться правильно - PullRequest
0 голосов
/ 07 марта 2019

Я сейчас работаю над фрагментом кода, и операторы 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 Ответ

2 голосов
/ 07 марта 2019

Вы не можете связать логические операторы, такие как 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
...