该实例说明了如何对一个典型的混合动力系统弹跳球进行建模。该模型既包括连续动态,也包括离散过渡。它使用符号数学工具箱来帮助解释ODE求解背后的一些理论gydF4y2Ba金宝appSimulink®弹跳球模型gydF4y2Ba.gydF4y2Ba
球反弹时没有角度gydF4y2Ba
没有阻力gydF4y2Ba
t=0时刻的高度为10米gydF4y2Ba
以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);H = 1, H = 1gydF4y2Ba
D2h (t) =gydF4y2Ba
使用以下方法解决ODEgydF4y2BaDsolve.gydF4y2Ba
:gydF4y2Ba
eqn = dsolve(D2h, H(0) = h_0, Dh(0) = v_0)gydF4y2Ba
eqn =gydF4y2Ba
参数化探索抛物线轮廓的运动使用gydF4y2Ba潜艇gydF4y2Ba
:gydF4y2Ba
Eqn = subs(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米/秒的球将在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;gydF4y2Ba% t=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_b盎司;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米/秒的球将在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])保持gydF4y2Ba从gydF4y2Ba