2016-08-11 4 views
-1

Мне нужно использовать инструкцию elseif много раз, а elseif зависит от местоположения последовательности.MATLAB: if..elseif ... elseif много раз

Скажите, что я хочу использовать elseif 100 раз:

if cond1 
    action1 
    elseif cond2 
    action2 
    elseif cond3 
    action3 
    . 
    . 
    elseif cond101 
    action101 
    else 
    action102 
    end 

Как реализовать это в MATLAB с помощью петли или есть лучше более лаконичная функция для этой цели?

Кроме того, я сам написал все 101 условия и могу разместить их в любой структуре.

ответ

1

В комментариях вы, кажется, упоминаете, что обычно у вас будет набор из 101 условий, которые являются истинными или ложными, и вы просто хотите получить индекс первого, который станет истинным.

Вам не нужно if s для этого, определенно не 101 из них. Что-то вроде этого будет работать:

conditions=[false true true false ... ]; % E.g. conditions=rand(1,101)<0.2; 
% find the first one that is true 
index=find(conditions,1,'first'); 
3

Как и другие комментарии, я думаю, вам следует пересмотреть вопрос о том, как вы обрабатываете данные, поскольку с точки зрения разработки программного обеспечения, если каскад плохой, очень плохой.

Однако, если у вас нет лучшего способа выразить это, вы можете использовать две простые функции Matlab, которые могут быть действительно полезны: анонимные функции и массивы ячеек.

Идея состоит в создании массивов ячеек функций, каждая функция дает вам условие, которое вы хотите поместить внутри if, и вы проверяете каждую функцию и видите, какой из них дает вашу истину.

Например, чтобы проверить число должно быть меньше 0, от 0 до 1, или больше чем 1, вы могли бы сделать:

test_array = { 
    @(n) n < 0, 
    @(n) n >= 0 && n < 1, 
    @(n) n >= 1 
} 

затем, чтобы проверить на 0.5, вы можете просто сделать

for ii =[1:numel(test_array)] 
    if(test_array{ii}(0.5)) 
     disp(ii) 
    end 
end 

Я тестировал его на Matlab R2016a, и он работает.

Надеюсь, это поможет!