3.Modelica由入门到精通——连续离散混合建模
本人正在整理Modelica相关知识,特此做博客,希望可以帮助到有需要的朋友
文章目录
- 3.Modelica由入门到精通——连续离散混合建模
- 一、 总览
- 二、表达混合结构的结构体
- 三、示例
一、 总览
物理系统的动态特性可以是连续时变的,也可以是离散时变的,即系统状态只在某些离散时间点上发生变化。动态连续建模的关键是基于能量守恒、动量守恒、质量守恒等基本物理定律描述系统行为,而离散事件建模的关键是怎样表达与事件相关的行为。
二、表达混合结构的结构体
Modelica语言提供如下两种结构体用于表达混合模型。
(1) if结构,包含条件表达式和条件方程,用于描述不连续条件模型。
(2) when结构,用于表示只在某些离散时刻有效的方程。
if结构具有如下一般形式:
if condition1 then
<equations>
else condition2
<equations>
end if;
在if和else之间允许出现elseif分支。
when结构具有如下一般形式:
when {condition1, condition2, ..} then
<equations>
end when;
if结构和when结构的区别在于:if结构中的方程在条件为true时的整个区间内
都是有效的,变量在整个有效区间内被连续求值;而when结构中的方程仅仅在条件
由false变成true 的瞬间生效,变量在事件发生瞬间被求值,在区间中保持不变。
三、示例
如图2.6所示的正在弹跳的球就是-一个混合系统的例子196。球的运动通过球的高height和速度velocity 来描述。球在两次碰地弹起期间连续地运动,当球碰到地面弹起时,离散事件发生,速度反向。假定球的弹性系数为0.9,即球每次反弹的速度为原来的百分之九十。下面给出的是该模型的Modelica代码。
model BouncingBall
constant Real g= 9.81;
parameter Real c= 0.9;
parameter Real radius=0.1;
Real height(start=1);
Real velocity(start=0);
equation
der(height) = velocity;
der(velocity) = -g; .
when height . <= radius then
reinit(velocity,-c* pre(velocity));
end when;
end BouncingBall;
其中,reinit 表示重新初始化操作,它只有在球触地的瞬间生效,用于重新初始
化球的速度。