2.4.6 条件方程

2.4.6 条件方程

条件方程用来对连续离散混合系统进行建模。条件方程有两种:if方程和when方程。

2.4.6.1 if方程

if方程的一般形式如下所示。其中,elseif是可选的,可以出现零次或多次;else也是可选的,最多可以出现一次。

其中,<条件>是Boolean标量表达式,当if或elseif条件成立时,对应分支中的方程生效;否则,else分支中的方程生效。例如:

if方程中,如果if和elseif分支的条件不是参数和常量,则必须有对应的else分支,并且每个分支中的方程数目是相同的。

2.4.6.2 when方程

when方程用来表示在事件时刻有效的瞬态方程。when方程的一般形式如下所示。其中,elsewhen是可选的,可以出现零次或多次。

when方程中的<条件>是Boolean类型的标量或向量。只有在when/elsewhen标量条件或向量条件中任何一个元素由false变为true的事件时刻,对应when或elsewhen分支中的方程才生效。

向量条件与多个表达式进行“或”运算的标量条件是不一样的,向量条件中只要任何一个元素变为true,则该分支中的方程就生效;而标量条件被当作一个整体,进行“或”运算后的结果变为true时,该分支中的方程才生效。例如:

when方程不能嵌套when方程,也就是说,when方程结构中不能有其他when方程。下面when的使用是错误的:

when方程结构中的方程只能是下列几种形式之一:

(1)v=expr;//左边是变量名。

(2)(out1,out2,…)=function_call_name(in1,in2,…);/*左边是变量列表。*/

(3)assert(),terminate(),reinit()。

(4)嵌套结构中,方程满足上述要求的if方程和for方程。

左边的变量是离散变量,只在when条件激活时的事件时刻更新其值,when条件没有激活时,保持值不变。同一个变量不能出现在多个when方程的等式左边,这样会导致当多个when方程的条件同时成立时,该变量具有多个方程约束而造成冲突。

2.4.6.3 if方程和when方程的比较

if方程用于对在不同的条件下具有不同行为的情形建模,when方程用来对只在事件时刻改变模型行为(方程)的场景建模。

if方程中可以包含连续变量,而when方程中都当作离散变量。

if方程中,只要分支的条件成立,其中的方程就作为模型的方程进行计算,而when方程仅在条件变为true的瞬时才进行计算。

例如:

b1和b2的变化曲线如图2-11所示。

图2-11 if和when方程曲线对比