matlab屏保弹球,连续时间下的弹球建模

弹球的动态特性

您可以使用下面的一阶微分方程组,通过位置 p 和速度 v 来指定球在重力作用下如何自由落下。

7f94b2fac8109adf7740ee5acbbac711.png

39530bf4cc75ead1a383298780044c39.png

当 p <= 0 时,球触地并反弹。您可以通过更新球的位置和速度对反弹建模:

将位置重置为 p = 0。

将速度重置为刚触地之前的值的负数。

考虑到能量损失,将新速度乘以分布系数 (-0.8)。

配置连续时间仿真的图

在模型中,BouncingBall 图实现模态逻辑,以仿真自由落体的连续动态特性以及与反弹关联的离散变化。在 Chart 属性对话框中,以下设置使 BouncingBall 图能够在连续时间内仿真:

Update method 为 Continuous,因此图采用连续时间仿真对弹球的动态特性建模。

选择 Enable zero-crossing detection,因此 Simulink® 求解器可以准确确定球何时触地。否则,Simulink 模型不能准确仿真物理特性,球会像是落入地下。

82980c72c6745a6b0cfa37d8326d9901.png

定义连续时间变量

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 窗格中。

26534e294c05224fe270aeb8512c8c07.png

自由落体的连续动态特性建模

BouncingBall 图包含单个状态 Falling,它以数值方式求解自由落体的微分方程。到该状态的默认转移会将初始位置设为 10 米,初始速度设为 15 米/秒。在该状态中的 during 动作:

定义位置和速度的导数。

将球的位置和速度值赋给输出变量 p_out 和 v_out。

8cbd295d66ca794b79d9a161bf54fd05.png

反弹的离散特性建模

Falling 状态具有一个自环转移,将反弹的不连续性建模为一个瞬时模式更改(球的运动方向突然反转)。转移的条件通过检查球的位置 p <= 0 和速度 v < 0 来确定球何时触地。如果条件有效,则条件动作会在球触地时重置位置和速度。

为什么不检查 p == 0?

球会在位置 p 正好为零时触地。通过放宽条件,可以增加 Simulink 求解器能够检测到位置于何时改变符号的容差。

为什么检查 v < 0?

条件的第二部分通过将过零的频率减至最小来协助保持 Simulink 求解器的效率。如果没有第二个检查,状态转移后条件仍为 true,这将导致两个连续的过零。

验证图语义

在发生默认转移时初始化局部变量 p 和 v。

在 during 动作中为导数 p_dot 和 v_dot 赋值。

在转移动作中写入局部变量 p 和 v。

不包含事件、内部转移、基于事件的时序逻辑或更改检测运算符。

查看仿真结果

运行模型后,示波器将显示位置图和速度图。位置图展示了预期的反弹模式。

4ddec25945af392a756f924c8c0dcef3.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值