弹跳球的模拟
本示例使用两个弹跳球Simulink®模型来展示用Zeno行为建模混合动态系统的不同方法。该示例还提供了每种方法的优点。
弹跳球模型是具有芝诺现象的混合动力系统。芝诺行为被非正式地描述为某些混合系统在有限时间间隔内发生的无限数量的事件。当球失去能量时,大量与地面的碰撞开始在较短的时间间隔内连续发生。
混合动态系统
弹跳球模型是混合动力系统的一个例子。混合动态系统是一种同时包含连续动态和离散过渡的系统,其中系统动态可以改变,状态值可以跳跃。弹跳球的连续动力学由以下方程给出:
在哪里是重力引起的加速度,是球的位置,和是速度。因此,系统有两个连续状态:位置和速度.
该模型的混合系统方面源于球与地面碰撞的建模。如果假设与地面发生部分弹性碰撞,那么碰撞前的速度,,碰撞后的速度,,可以用球的恢复系数来表示,,如下所示:
因此,在过渡状态下,弹跳球在连续状态(速度)下进行跳跃,.这张图显示了一个从25米的高度以0米/秒的速度抛出的球。
使用两个积分器块建模弹跳球
的sldemo_bounce_two_integrators
模型使用两个积分器块来模拟一个弹跳的球。左边的积分器块是对第一个方程建模的速度积分器。右边的积分器块是位置积分器。打开位置积分器块对话框,观察块的下限为零。这个条件表示球不能飞到地下的约束。
位置积分器的状态端口和相应的比较结果用于检测球何时触地并复位两个积分器。速度积分器的状态端口用于计算.
要观察系统的Zeno行为,请转到解算器“配置参数”对话框中的“配置参数”。在“仿真时间”中设置“停止时间”为“25”。
在仿真时间,设置停止时间来
25
.扩大解决细节问题,在
Zero-corssing选项
,设置算法来非适应
.
模拟模型。
当球更频繁地撞击地面并损失能量时,模拟超过了连续过零的次数默认的极限1000
.
在“配置参数”对话框中,转到解算器>零交点选项.集算法来自适应
.该算法引入了一种复杂的处理抖振行为的方法。您现在可以模拟超过20秒的系统。但是,请注意,在21秒到25秒之间的状态抖动,以及来自Simulink的关于模型在20秒左右强烈抖动的警告。
用二阶积分块模拟弹跳球
的sldemo_bounce
模型使用一个二阶积分器块来模拟一个弹跳的球。在这种情况下,第二个方程在本例中是二阶积分器块内部的。打开“二阶积分器”块对话框,查看结果其下限为零。在属性选项卡,检查当x达到饱和时,重新初始化dx/dt
.此参数允许您重新初始化(在弹跳球模型中)到一个新的值时达到饱和极限。所以,在弹跳球模型中,当球击中地面时,它的速度可以设置为不同的值,比如撞击后的速度。注意计算与地面碰撞后速度的循环。为了捕捉速度就在碰撞之前,那个球使用了二阶积分器块的输出端口和内存块。然后用来计算反弹速度吗.
在“配置参数”对话框中,进入解算器窗格。
在仿真时间,设置停止时间来
25
.扩大解算器的细节.在零交点选项,设置算法来
非适应
.
模拟模型。
注意,模拟没有遇到任何问题。您可以模拟模型,而不会在20秒后出现过多的颤振,也不需要进行设置算法来自适应
.
比较弹跳球的建模方法
你可以分析计算出确切的时间当球以零速度降落到地面时,将每次反弹所需的时间相加。这个时间是一个无限几何级数的和,由:
在哪里而且分别是位置和速度的初始条件。球的速度和位置必须等于零.图中显示了附近两个模拟的结果.图中垂直的红线是对于给定的模型参数。为远离,两个模型都能得到准确而相同的结果。图中只有第二条模型的洋红色线可见。然而,第一个模型的模拟结果并不准确.剧情继续表现出过分的喋喋不休的行为.相比之下,使用二阶积分器块的模型在.
由于二阶微分方程的存在,采用二阶积分器分块的模型比第一个模型具有更好的数值特性是二阶积分器块内部的。块算法可以利用两种状态之间的这种关系,并使用启发式来抑制特定条件下的抖振行为。当两种状态由于积分误差和抖振行为不再相互一致时,这些启发式就会变得活跃。因此,您可以使用系统的物理知识来防止对某些Zeno模型的模拟陷入Zeno状态。