【问题标题】:Is there a concise alternative to this cascaded if / elseif / else construct in MATLAB?在 MATLAB 中,这个级联 if / elseif / else 构造是否有简洁的替代方法?
【发布时间】:2012-06-02 00:15:42
【问题描述】:

我正在开展一个项目,该项目需要在整个地方用数字量制作离散值。目前我正在使用级联的 if / elseif / else 构造,例如:

    if M > 6
        evidence{2} = 3;
    elseif M > 2
        evidence{2} = 2;
    else
        evidence{2} = 1;
    end

我想用更易于维护(和简洁)的语法来替换它,但在我想出自己的习惯之前,我想知道 MATLAB 中是否已经有一个方便的函数或语法可用。有什么建议吗?

【问题讨论】:

  • 这取决于条件可以采取什么形式。
  • if 语句有什么问题?它具有可读性和可维护性。
  • if 语句在您的函数包含大量它们时会变得笨拙。当您想尝试更改类别数量时,它们也不是很方便。
  • 您考虑过switch 声明吗?

标签: matlab syntax if-statement


【解决方案1】:
evidence{2} = 1 + (M > 2) + (M > 6);

但在我看来,它的可维护性较差。你的更好。

【讨论】:

  • 逻辑量需要用括号括起来:1+(M>2)+(M>6) 来指定优先级。
【解决方案2】:

怎么样:

evidence{2} = sum( M > [-inf 2 6] )

基本上,您正在搜索 M 所在的区间:(-inf,2], (2,6], (6,+inf)

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

【讨论】:

    猜你喜欢
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 2010-10-12
    • 2021-09-29
    相关资源
    最近更新 更多