MATLAB:if..elseif ... elseif很多次

时间:2016-08-11 09:09:47

标签: matlab

我需要多次使用elseif语句,elseif取决于序列位置。

说我想用elseif 100次:

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

如何使用循环在MATLAB中实现它还是有更好的更简洁的功能用于此目的?

另外,我自己编写了所有101个条件,并且可以将它们放在任何结构中。

2 个答案:

答案 0 :(得分: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上进行了测试,它确实有效。

希望它有所帮助!

答案 1 :(得分:1)

在评论中你似乎提到,通常你会有一组101个条件,无论是真还是假,你只想得到第一个成为真的索引。

你不需要if,绝对不是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');