这个例子展示了如何建模一个弹跳的球,这是一个经典的混合动力系统。该模型包括连续动态和离散转移。它使用符号数学工具箱来帮助解释ODE求解背后的一些理论gydF4y2Ba万博1manbetxSimulink®弹跳球模型gydF4y2Ba。gydF4y2Ba
球无角度地反弹gydF4y2Ba
没有阻力gydF4y2Ba
t=0时的高度为10 mgydF4y2Ba
抛出向上速度为15米/秒gydF4y2Ba
恢复系数定义为gydF4y2Ba
其中v为物体撞击前的速度,u为物体撞击后的速度。gydF4y2Ba
我们把二阶微分方程分开gydF4y2Ba
成gydF4y2Ba
被离散的gydF4y2Ba
和gydF4y2Ba
被离散的gydF4y2Ba
我们将使用基本的一阶正欧拉数值积分法。gydF4y2Ba
使用符号数学工具箱,我们可以分析地解决这个问题。这让我们可以更容易地解决某些问题,比如精确地确定球第一次触地的时间。gydF4y2Ba
声明我们的符号变量。gydF4y2Ba
信谊gydF4y2BaggydF4y2BatgydF4y2BaH (t)gydF4y2Bah_0gydF4y2Bav_0gydF4y2Ba
分开二阶微分方程gydF4y2Ba 成gydF4y2Ba 和gydF4y2Ba 。gydF4y2Ba
Dh = diff (H);diff(H, 2) == ggydF4y2Ba
d2h(t)=gydF4y2Ba
用下面的方法解决ODEgydF4y2BaDsolve.gydF4y2Ba
:gydF4y2Ba
eqn = dsolve(D2h, H(0) == h_0, Dh(0) == v_0)gydF4y2Ba
eqn =gydF4y2Ba
参数探索使用运动的抛物线轮廓gydF4y2Ba潜艇gydF4y2Ba
:gydF4y2Ba
EQN = SUMM(EQN,[H_0,V_0,G],[10,15,-9.81])gydF4y2Ba
eqn =gydF4y2Ba
通过解决零,找到球击中地面的时间:gydF4y2Ba
假设(t> 0)thit =求解(eqn == 0)gydF4y2Ba
,越南=gydF4y2Ba
可视化解决方案gydF4y2Ba
fplot(eqn,[0 10]) ylim([0 25])gydF4y2Ba
使用可变精度算术格式化确切的结果gydF4y2BavpagydF4y2Ba
:gydF4y2Ba
disp ([gydF4y2Ba“球的初始高度为10米,速度为15米/秒,将以15米/秒的速度撞击地面。”gydF4y2Bachar (vpa(,越南,4))gydF4y2Ba“秒”。gydF4y2Ba])gydF4y2Ba
球的初始高度为10m,速度为15m/s,将在3.621秒时撞击地面。gydF4y2Ba
设置模拟参数gydF4y2Ba
球gydF4y2Ba
c_bounce =。9;gydF4y2Ba%弹跳恢复系数;完全恢复是1gydF4y2Ba
模拟的性质gydF4y2Ba
重力= 9.8;gydF4y2Ba%重力的加速度(m / s)gydF4y2Baheight_0 = 10;gydF4y2Ba% t=0时的初始高度(m)gydF4y2BaVelocity_0 = 15;gydF4y2Bat=0时的初速度% (m/s)gydF4y2Ba
声明模拟时间步长gydF4y2Ba
dt = 0.05;gydF4y2Ba%动画时间gydF4y2Bat_final = 25;gydF4y2Ba%模拟时段(s)gydF4y2Bat = 0: dt: t_final;gydF4y2Ba%时间间隔gydF4y2BaN =长度(t);gydF4y2Ba迭代次数%gydF4y2Ba
初始化模拟量gydF4y2Ba
h = [];gydF4y2Ba球高与时间的关系% (m)gydF4y2Bav = [];gydF4y2Ba%球的速度(m/s)与时间(m/s)的函数gydF4y2Bah (1) = height_0;v (1) = velocity_0;gydF4y2Ba
模拟弹跳球(我们将使用基本的一阶正欧拉数值积分):gydF4y2Ba
为gydF4y2Bai = 1: n - 1 v (i + 1) =(我)重力* dt;h (i + 1) = h (i) + v (i) * dt;gydF4y2Ba%当球弹起时(高度小于0),gydF4y2Ba%反转速度并重新计算位置。gydF4y2Ba%使用恢复系数gydF4y2Ba如果gydF4y2Bah(i + 1)<0 V(i)= - v(i)* c_bounce;v(i + 1)= v(i)-gravity * dt;h(i + 1)= 0 + v(i)* dt;gydF4y2Ba结束gydF4y2Ba结束gydF4y2Ba
对仿真结果进行可视化验证gydF4y2Ba
情节(t,h,gydF4y2Ba'o'gydF4y2Ba) 抓住gydF4y2Ba上gydF4y2Bafplot (eqn 10[0])标题(gydF4y2Ba高度随时间的gydF4y2Ba) ylim([0 25])持有gydF4y2Ba离开gydF4y2Ba
情节(t, v)标题(gydF4y2Ba速度随着时间的gydF4y2Ba)gydF4y2Ba
作为一个提醒,撞击的时间是:gydF4y2Ba
disp ([gydF4y2Ba“球的初始高度为10米,速度为15米/秒,将以15米/秒的速度撞击地面。”gydF4y2Bachar (vpa(,越南,4))gydF4y2Ba“秒”。gydF4y2Ba])gydF4y2Ba
球的初始高度为10m,速度为15m/s,将在3.621秒时撞击地面。gydF4y2Ba
从数值模拟中我们可以找到在模拟时最接近的数值gydF4y2Ba
我= CEIL(DOUBLE(THIT / DT));T([I-1 I I + 1])gydF4y2Ba
ans =gydF4y2Ba1×3gydF4y2Ba3.5500 3.6000 3.6500.gydF4y2Ba
情节(t,h,gydF4y2Ba'o'gydF4y2Ba) 抓住gydF4y2Ba上gydF4y2Bafplot (eqn 10[0])情节(t([张我+ 1]),h([张我+ 1]),gydF4y2Ba“* R”gydF4y2Ba) 标题(gydF4y2Ba高度随时间的gydF4y2Ba) xlim([0 5]) ylim([0 25]) holdgydF4y2Ba离开gydF4y2Ba