在MATLAB中,是否有一种简洁的替代方法来替代这种级联if/elseif/else结构?

在MATLAB中,是否有一种简洁的替代方法来替代这种级联if/elseif/else结构?,matlab,syntax,if-statement,Matlab,Syntax,If Statement,我在一个项目上工作,这个项目需要在所有地方用数字量制作离散值。目前我使用的是级联if/elseif/else结构,例如: if M > 6 evidence{2} = 3; elseif M > 2 evidence{2} = 2; else evidence{2} = 1; end 我想用一种更易于维护(更简洁)的语法来代替它,但在我提出自己的习惯用法之前,我想知道MATLAB中是否已经有了一种方便的

我在一个项目上工作,这个项目需要在所有地方用数字量制作离散值。目前我使用的是级联if/elseif/else结构,例如:

    if M > 6
        evidence{2} = 3;
    elseif M > 2
        evidence{2} = 2;
    else
        evidence{2} = 1;
    end
我想用一种更易于维护(更简洁)的语法来代替它,但在我提出自己的习惯用法之前,我想知道MATLAB中是否已经有了一种方便的函数或语法。有什么建议吗

evidence{2} = 1 + (M > 2) + (M > 6);
但在我看来,它的可维护性较差。你的更好。

怎么样:

evidence{2} = sum( M > [-inf 2 6] )
基本上,您正在搜索M所在的区间:(-inf,2),(2,6),(6,+inf)


因此,即使您的值不是1/2/3,您也可以将找到的范围索引映射到其他一些值…

这取决于条件的形式。
if
语句有什么问题?它是可读的和可维护的。
if
语句在您的函数包含分数时会变得笨拙。而且它们也是当您想要尝试更改类别的数量时,您不是很方便。您是否考虑过
switch
语句?您需要在逻辑量周围加括号:
1+(M>2)+(M>6)
来指定优先级。