主要内容gydF4y2Ba

使用符号数学工具箱万博1manbetx验证Simulink模型gydF4y2Ba

这个例子展示了如何对一个经典的混合动力系统——弹跳球建模。该模型既包括连续动态,也包括离散跃迁。它使用符号数学工具箱™来帮助解释ODE求解背后的一些理论gydF4y2Ba弹球模拟gydF4y2Ba(万博1manbetx模型)gydF4y2Ba.gydF4y2Ba

假设gydF4y2Ba

  • 球无角度反弹gydF4y2Ba

  • 没有阻力gydF4y2Ba

  • 时刻t=0时的高度为10米gydF4y2Ba

  • 以15米/秒的速度向上投掷gydF4y2Ba

推导gydF4y2Ba

归还系数定义为gydF4y2Ba

CgydF4y2Ba rgydF4y2Ba =gydF4y2Ba vgydF4y2Ba bgydF4y2Ba -gydF4y2Ba vgydF4y2Ba 一个gydF4y2Ba /gydF4y2Ba ugydF4y2Ba 一个gydF4y2Ba -gydF4y2Ba ugydF4y2Ba bgydF4y2Ba

其中v是物体撞击前的速度,u是撞击后的速度。gydF4y2Ba

我们分解二阶微分方程gydF4y2Ba

dgydF4y2Ba 2gydF4y2Ba hgydF4y2Ba dgydF4y2Ba tgydF4y2Ba 2gydF4y2Ba =gydF4y2Ba -gydF4y2Ba ggydF4y2Ba

成gydF4y2Ba

dgydF4y2Ba hgydF4y2Ba dgydF4y2Ba tgydF4y2Ba =gydF4y2Ba vgydF4y2Ba 离散为gydF4y2Ba hgydF4y2Ba (gydF4y2Ba tgydF4y2Ba +gydF4y2Ba ΔgydF4y2Ba tgydF4y2Ba )gydF4y2Ba -gydF4y2Ba hgydF4y2Ba (gydF4y2Ba tgydF4y2Ba )gydF4y2Ba ΔgydF4y2Ba tgydF4y2Ba =gydF4y2Ba vgydF4y2Ba (gydF4y2Ba tgydF4y2Ba )gydF4y2Ba

而且gydF4y2Ba

dgydF4y2Ba vgydF4y2Ba dgydF4y2Ba tgydF4y2Ba =gydF4y2Ba -gydF4y2Ba ggydF4y2Ba 离散为gydF4y2Ba vgydF4y2Ba (gydF4y2Ba tgydF4y2Ba +gydF4y2Ba ΔgydF4y2Ba tgydF4y2Ba )gydF4y2Ba -gydF4y2Ba vgydF4y2Ba (gydF4y2Ba tgydF4y2Ba )gydF4y2Ba ΔgydF4y2Ba tgydF4y2Ba =gydF4y2Ba -gydF4y2Ba ggydF4y2Ba

我们将使用前向欧拉,使用基本的一阶数值积分。gydF4y2Ba

hgydF4y2Ba (gydF4y2Ba tgydF4y2Ba +gydF4y2Ba ΔgydF4y2Ba tgydF4y2Ba )gydF4y2Ba =gydF4y2Ba hgydF4y2Ba (gydF4y2Ba tgydF4y2Ba )gydF4y2Ba +gydF4y2Ba vgydF4y2Ba (gydF4y2Ba tgydF4y2Ba )gydF4y2Ba ΔgydF4y2Ba tgydF4y2Ba

vgydF4y2Ba (gydF4y2Ba tgydF4y2Ba +gydF4y2Ba ΔgydF4y2Ba tgydF4y2Ba )gydF4y2Ba =gydF4y2Ba vgydF4y2Ba (gydF4y2Ba tgydF4y2Ba )gydF4y2Ba -gydF4y2Ba ggydF4y2Ba ΔgydF4y2Ba tgydF4y2Ba

分析地解决问题gydF4y2Ba

使用符号数学工具箱,我们可以分析地处理这个问题。这让我们可以更容易地解决某些问题,比如精确地确定球第一次触地的时间(下图)。gydF4y2Ba

声明我们的符号变量。gydF4y2Ba

信谊gydF4y2BaggydF4y2BatgydF4y2BaH (t)gydF4y2Bah_0gydF4y2Bav_0gydF4y2Ba

分解二阶微分方程gydF4y2Ba dgydF4y2Ba 2gydF4y2Ba hgydF4y2Ba dgydF4y2Ba tgydF4y2Ba 2gydF4y2Ba =gydF4y2Ba -gydF4y2Ba ggydF4y2Ba 成gydF4y2Ba dgydF4y2Ba hgydF4y2Ba dgydF4y2Ba tgydF4y2Ba =gydF4y2Ba vgydF4y2Ba 而且gydF4y2Ba dgydF4y2Ba vgydF4y2Ba dgydF4y2Ba tgydF4y2Ba =gydF4y2Ba -gydF4y2Ba ggydF4y2Ba .gydF4y2Ba

Dh = diff(H);D2h = diff(H, 2) == ggydF4y2Ba
D2h (t) =gydF4y2Ba

∂gydF4y2Ba 2gydF4y2Ba ∂gydF4y2Ba tgydF4y2Ba 2gydF4y2Ba HgydF4y2Ba (gydF4y2Ba tgydF4y2Ba )gydF4y2Ba =gydF4y2Ba ggydF4y2Ba

使用以下方法求解ODEgydF4y2BadsolvegydF4y2Ba:gydF4y2Ba

eqn = dsolve(D2h, H(0) == h_0, Dh(0) == v_0)gydF4y2Ba
eqn =gydF4y2Ba

ggydF4y2Ba tgydF4y2Ba 2gydF4y2Ba 2gydF4y2Ba +gydF4y2Ba vgydF4y2Ba 0gydF4y2Ba tgydF4y2Ba +gydF4y2Ba hgydF4y2Ba 0gydF4y2Ba

参数化地探索运动的抛物线轮廓gydF4y2Ba潜艇gydF4y2Ba:gydF4y2Ba

Eqn = subs(Eqn, [h_0, v_0, g], [10,15, -9.81])gydF4y2Ba
eqn =gydF4y2Ba

-gydF4y2Ba 981gydF4y2Ba tgydF4y2Ba 2gydF4y2Ba 200gydF4y2Ba +gydF4y2Ba 15gydF4y2Ba tgydF4y2Ba +gydF4y2Ba 10gydF4y2Ba

通过求解0,求出球落地的时间:gydF4y2Ba

假设(t > 0) tHit = solve(eqn == 0)gydF4y2Ba
,越南=gydF4y2Ba

20.gydF4y2Ba 5gydF4y2Ba 26gydF4y2Ba 109gydF4y2Ba +gydF4y2Ba 500gydF4y2Ba 327gydF4y2Ba

可视化解决方案:gydF4y2Ba

Fplot (eqn,[0 10]) ylim([0 25])gydF4y2Ba

图中包含一个轴对象。axis对象包含一个functionline类型的对象。gydF4y2Ba

使用可变精度算法格式化您的精确结果gydF4y2BavpagydF4y2Ba:gydF4y2Ba

disp ([gydF4y2Ba初始高度为10米,速度为15米/秒的球在落地时gydF4y2Bachar (vpa(,越南,4))gydF4y2Ba“秒”。gydF4y2Ba])gydF4y2Ba
初始高度为10m,速度为15m/s的球在3.621秒落地。gydF4y2Ba

用数值方法解决问题gydF4y2Ba

设置模拟参数gydF4y2Ba

球的性质gydF4y2Ba

C_bounce = .9;gydF4y2Ba%弹跳恢复系数;完全返还是1gydF4y2Ba

仿真特性gydF4y2Ba

重力= 9.8;gydF4y2Ba%重力加速度(m/s)gydF4y2Bahight_0 = 10;gydF4y2Bat=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/秒)作为时间的函数(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) =(我)重力* dt;h (i + 1) = 0 + v (i) * dt;gydF4y2Ba结束gydF4y2Ba结束gydF4y2Ba

可视化和验证模拟gydF4y2Ba

情节(t、h、gydF4y2Ba“o”gydF4y2Ba)举行gydF4y2Ba在gydF4y2BaFplot (eqn,[0 10]) title(gydF4y2Ba“身高随时间变化”gydF4y2Ba) ylim([0 25])保持gydF4y2Ba从gydF4y2Ba

图中包含一个轴对象。标题为Height over time的axes对象包含2个类型为line、functionline的对象。gydF4y2Ba

情节(t, v)标题(gydF4y2Ba“速度除以时间”gydF4y2Ba)gydF4y2Ba

图中包含一个轴对象。标题为Velocity over time的axis对象包含一个类型为line的对象。gydF4y2Ba

用分析验证数字gydF4y2Ba

比较你的分析结果和数值结果。gydF4y2Ba

提醒一下,撞击的时间是:gydF4y2Ba

disp ([gydF4y2Ba初始高度为10米,速度为15米/秒的球在落地时gydF4y2Bachar (vpa(,越南,4))gydF4y2Ba“秒”。gydF4y2Ba])gydF4y2Ba
初始高度为10m,速度为15m/s的球在3.621秒落地。gydF4y2Ba

从数值模拟中我们可以找到模拟中最接近的值gydF4y2Ba hgydF4y2Ba (gydF4y2Ba tgydF4y2Ba 我gydF4y2Ba )gydF4y2Ba ≈gydF4y2Ba 0gydF4y2Ba

i = ceil(double(tHit/dt));T ([I -1 I I +1])gydF4y2Ba
ans =gydF4y2Ba1×3gydF4y2Ba3.5500 3.6000 3.6500gydF4y2Ba
情节(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

图中包含一个轴对象。标题为Height over time的axes对象包含3个类型为line、functionline的对象。gydF4y2Ba