弹球的动态特性
您可以使用下面的一阶微分方程组,通过位置 p 和速度 v 来指定球在重力作用下如何自由落下。
当 p <= 0 时,球触地并反弹。您可以通过更新球的位置和速度对反弹建模:
将位置重置为 p = 0。
将速度重置为刚触地之前的值的负数。
考虑到能量损失,将新速度乘以分布系数 (-0.8)。
配置连续时间仿真的图
在模型中,BouncingBall 图实现模态逻辑,以仿真自由落体的连续动态特性以及与反弹关联的离散变化。在 Chart 属性对话框中,以下设置使 BouncingBall 图能够在连续时间内仿真:
Update method 为 Continuous,因此图采用连续时间仿真对弹球的动态特性建模。
选择 Enable zero-crossing detection,因此 Simulink® 求解器可以准确确定球何时触地。否则,Simulink 模型不能准确仿真物理特性,球会像是落入地下。
定义连续时间变量
BouncingBall 图有两个连续时间变量:p 表示位置,v 表示速度。对于这些变量中的每个变量:
Scope 为 Local。
Type 为 double。
Update Method 为 Continuous。
为了向 Simulink 模型提供图的连续状态,BouncingBall 图使用两个输出变量:p_out 和 v_out。对于这些变量中的每个变量:
Scope 为 Output。
Type 为 double。
Update Method 为 Discrete。
该图隐式定义连续时间变量的时间导数:
p_dot 是位置 p 的导数。
v_dot 是速度 v 的导数。
在 Model Explorer 中,您可以在图中查看连续时间局部变量和对应的输出。隐式导数变量不会出现在 Model Explorer 或 Symbols 窗格中。
自由落体的连续动态特性建模
BouncingBall 图包含单个状态 Falling,它以数值方式求解自由落体的微分方程。到该状态的默认转移会将初始位置设为 10 米,初始速度设为 15 米/秒。在该状态中的 during 动作:
定义位置和速度的导数。
将球的位置和速度值赋给输出变量 p_out 和 v_out。
反弹的离散特性建模
Falling 状态具有一个自环转移,将反弹的不连续性建模为一个瞬时模式更改(球的运动方向突然反转)。转移的条件通过检查球的位置 p <= 0 和速度 v < 0 来确定球何时触地。如果条件有效,则条件动作会在球触地时重置位置和速度。
为什么不检查 p == 0?
球会在位置 p 正好为零时触地。通过放宽条件,可以增加 Simulink 求解器能够检测到位置于何时改变符号的容差。
为什么检查 v < 0?
条件的第二部分通过将过零的频率减至最小来协助保持 Simulink 求解器的效率。如果没有第二个检查,状态转移后条件仍为 true,这将导致两个连续的过零。
验证图语义
在发生默认转移时初始化局部变量 p 和 v。
在 during 动作中为导数 p_dot 和 v_dot 赋值。
在转移动作中写入局部变量 p 和 v。
不包含事件、内部转移、基于事件的时序逻辑或更改检测运算符。
查看仿真结果
运行模型后,示波器将显示位置图和速度图。位置图展示了预期的反弹模式。