模型中的If-Else结构
Balaji Kalluri在评论中问了一个问题关于MUX块的文章.巴拉吉问道:
嗨,所有
我将非常感激,如果有人能告诉我一个典型的2对1多路复用器的建模路线,我们已经阅读和理解它。我想把典型的数字2对1 Mux作品的行为转换成SIMULINK模型。金宝app
如果(sel = = 0)
Out = in1;
elseif (sel = = 1)
Out = in2;
今天我想看看解决这个问题的一种方法。
控制哪个信号通过(开关)
考虑这个问题的一种方法是控制哪些信号通过系统。开关块提供了一种根据控制信号的值传递一个信号或另一个信号的方法。
这将创建一个if-表达式:当条件语句为true时,out将被设置为第一个导入,否则,out将被设置为第三个导入。
优化模型
这代表了所需的逻辑,但还有另一种方式来考虑这个问题。两者都考虑三机一体而且in2是其他一些昂贵计算的结果。在这种情况下,您希望只执行输出表达式所需的其中一个计算,而不是总是计算两个值,然后丢弃不需要的值。
幸运的是,这是一个常见的模式,并且Simulink提供了优化来提高效率。金宝app默认情况下,条件输入分支执行被在(在“配置参数->优化”页面中)。
这种优化允许Simulink将上游块分组在一起,并金宝app将它们塞进Switch块的条件语句中。如果打开块排序显示,您可能能够理解这种行为,但我更喜欢查看这样简单模型的代码。
这种优化不仅仅局限于Switch块。其他产生条件表达式的块可以在其代码中合并上游和下游块。
我想以两点重要的说明结束这次讨论。
- 我特地编了这个例子来演示这种优化的效果。因为它是如此简单,我不得不禁用表达式折叠,否则代码将是相同的,无论如何。我不鼓励任何人在没有充分理由的情况下禁用表达式折叠。
- 因为这是一个优化,所以不能保证这种行为。如果你加入一些简单的东西测试点在增益和开关块之间,这将禁用优化。
还有其他方法可以为有效的条件行为建模并显式地保护算法的执行。我将把这个话题留到以后的文章中。
现在轮到你了
你考虑过你的模型的效率吗?如何使用Switch块?留下一个这里的评论分享你所知道的。
コメント
コメントを残すには,ここをクリックしてMathWorksアカウントにサインインするか新しいMathWorksアカウントを作成します。