使用符号数学工具箱万博1manbetx验证Simulink模型gydF4y2Ba
这个例子展示了如何对一个经典的混合动力系统——弹跳球建模。该模型既包括连续动态,也包括离散跃迁。它使用符号数学工具箱™来帮助解释ODE求解背后的一些理论gydF4y2Ba弹球模拟gydF4y2Ba(万博1manbetx模型)gydF4y2Ba.gydF4y2Ba
假设gydF4y2Ba
球无角度反弹gydF4y2Ba
没有阻力gydF4y2Ba
时刻t=0时的高度为10米gydF4y2Ba
以15米/秒的速度向上投掷gydF4y2Ba
推导gydF4y2Ba
归还系数定义为gydF4y2Ba
其中v是物体撞击前的速度,u是撞击后的速度。gydF4y2Ba
我们分解二阶微分方程gydF4y2Ba
成gydF4y2Ba
离散为gydF4y2Ba
而且gydF4y2Ba
离散为gydF4y2Ba
我们将使用前向欧拉,使用基本的一阶数值积分。gydF4y2Ba
分析地解决问题gydF4y2Ba
使用符号数学工具箱,我们可以分析地处理这个问题。这让我们可以更容易地解决某些问题,比如精确地确定球第一次触地的时间(下图)。gydF4y2Ba
声明我们的符号变量。gydF4y2Ba
信谊gydF4y2BaggydF4y2BatgydF4y2BaH (t)gydF4y2Bah_0gydF4y2Bav_0gydF4y2Ba
分解二阶微分方程gydF4y2Ba 成gydF4y2Ba 而且gydF4y2Ba .gydF4y2Ba
Dh = diff(H);D2h = diff(H, 2) == ggydF4y2Ba
D2h (t) =gydF4y2Ba
使用以下方法求解ODEgydF4y2BadsolvegydF4y2Ba
: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
通过求解0,求出球落地的时间:gydF4y2Ba
假设(t > 0) tHit = solve(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
球的性质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
情节(t, v)标题(gydF4y2Ba“速度除以时间”gydF4y2Ba)gydF4y2Ba
用分析验证数字gydF4y2Ba
比较你的分析结果和数值结果。gydF4y2Ba
提醒一下,撞击的时间是:gydF4y2Ba
disp ([gydF4y2Ba初始高度为10米,速度为15米/秒的球在落地时gydF4y2Bachar (vpa(,越南,4))gydF4y2Ba“秒”。gydF4y2Ba])gydF4y2Ba
初始高度为10m,速度为15m/s的球在3.621秒落地。gydF4y2Ba
从数值模拟中我们可以找到模拟中最接近的值gydF4y2Ba
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