此示例显示如何使用符号数学工具箱™模拟简单摆的运动。导出摆锤的运动方程,然后在数值上分析地求解方程,以便以任何角度进行数字。GydF4y2Ba
摆是一个遵循微分方程的简单机械系统。钟摆最初在垂直的位置上处于静止状态。当钟摆移动一个角度GydF4y2Ba 并释放,重力的力量将其拉回其静止位置。它的势头导致它过冲并达到一定角度GydF4y2Ba (如果没有摩擦力),等等。由于重力而沿着摆锤的运动的恢复力是GydF4y2Ba 。因此,根据牛顿的第二律,加速度的质量次必须相等GydF4y2Ba 。GydF4y2Ba
信谊GydF4y2BamGydF4y2Ba一个GydF4y2BaGGydF4y2Baθ(t)GydF4y2Baeqn = m*a == -m*g*sin(theta)GydF4y2Ba
eqn (t) =GydF4y2Ba
对于长度的摆锤GydF4y2Ba 摆锤的加速度,等于角加速度乘以GydF4y2Ba 。GydF4y2Ba
。GydF4y2Ba
代替GydF4y2Ba
通过使用GydF4y2Ba潜艇GydF4y2Ba
。GydF4y2Ba
信谊GydF4y2BaR.GydF4y2Baeqn = subs(eqn,a,r * diff(theta,2))GydF4y2Ba
eqn (t) =GydF4y2Ba
隔离角度加速度GydF4y2BaEQN.GydF4y2Ba
通过使用GydF4y2Ba隔离GydF4y2Ba
。GydF4y2Ba
EQN =孤立(EQN,Diff(Theta,2))GydF4y2Ba
EQN =GydF4y2Ba
收集常数GydF4y2Ba 和GydF4y2Ba 进入一个参数,这也被称为GydF4y2Ba固有频率GydF4y2Ba。GydF4y2Ba
。GydF4y2Ba
信谊GydF4y2Baomega_0GydF4y2BaEQN =子(EQN,G / R,OMEGA_0 ^ 2)GydF4y2Ba
EQN =GydF4y2Ba
运动方程是非线性的,很难用解析法求解。假设角度小,利用的泰勒展开将方程线性化GydF4y2Ba 。GydF4y2Ba
信谊GydF4y2BaXGydF4y2Ba约=泰勒(sin (x), x,GydF4y2Ba“秩序”GydF4y2Ba,2);大约=子(约,x,θ(t))GydF4y2Ba
约=GydF4y2Ba
运动方程变成了线性方程。GydF4y2Ba
EQNLINEAR =潜艇(EQN,SIN(THETA(T)),约)GydF4y2Ba
Eqnlinear =.GydF4y2Ba
解决方程GydF4y2Baeqnlinear.GydF4y2Ba
通过使用GydF4y2BaDsolve.GydF4y2Ba
。将初始条件指定为第二个参数。假设简化了解决方案GydF4y2Ba
是真实的GydF4y2Ba假设GydF4y2Ba
。GydF4y2Ba
信谊GydF4y2BaTheta_0.GydF4y2Batheta_t0.GydF4y2Batheta_t = diff(θ);cond = [theta(0)== theta_0,theta_t(0)== theta_t0];假设(omega_0,GydF4y2Ba'真实的'GydF4y2Ba)Thetasol(t)= dsolve(eqnlinear,cond)GydF4y2Ba
θol(t)=GydF4y2Ba
这个词GydF4y2Ba 被称为GydF4y2Ba阶段GydF4y2Ba。余弦和正弦函数重复GydF4y2Ba 。改变所需的时间GydF4y2Ba 经过GydF4y2Ba 称为时间段。GydF4y2Ba
。GydF4y2Ba
的时间段GydF4y2Ba 与钟摆长度的平方根成正比,它与质量无关。对于线性运动方程,时间周期不依赖于初始条件。GydF4y2Ba
用小角度近似画出钟摆的运动。GydF4y2Ba
定义物理参数:GydF4y2Ba
重力加速度GydF4y2Ba
摆锤的长度GydF4y2Ba
gvalue = 9.81;rvalue = 1;Omega_0Value = SQRT(GValue / Rvalue);t = 2 * pi / omega_0value;GydF4y2Ba
设置初始条件。GydF4y2Ba
theta_0value = 0.1 * pi;GydF4y2Ba%解仅适用于小角度。GydF4y2Batheta_t0value = 0;GydF4y2Ba%初始为静止状态。GydF4y2Ba
将物理参数和初始条件代入通解。GydF4y2Ba
vars = [omega_0 theta_0 theta_t0];值= [omega_0value theta_0value theta_t0value];thetasolplot = subs(θ,var,值);GydF4y2Ba
画谐波摆的运动。GydF4y2Ba
fplot(Thetasolplot(t * t)/ pi,[0 5]);网格GydF4y2Ba在GydF4y2Ba;标题(GydF4y2Ba'谐波摆动运动'GydF4y2Ba);Xlabel(GydF4y2Ba't / t'GydF4y2Ba);ylabel (GydF4y2Ba'\ theta / \ pi'GydF4y2Ba);GydF4y2Ba
找到解决方案后GydF4y2Ba ,想象钟摆的运动。GydF4y2Ba
x_pos =罪(thetaSolPlot);y_pos = cos (thetaSolPlot);fanimator (@fplot x_pos y_pos,GydF4y2Ba“柯”GydF4y2Ba那GydF4y2Ba'markerfacecolor'GydF4y2Ba那GydF4y2Ba'K'GydF4y2Ba那GydF4y2Ba'AnimationRange'GydF4y2Ba[0 5 * T]);抓住GydF4y2Ba在GydF4y2Ba;fanimator(@(t) plot([0 x_pos(t)],[0 y_pos(t)],GydF4y2Ba“k -”GydF4y2Ba),GydF4y2Ba'AnimationRange'GydF4y2Ba[0 5 * T]);fanimator (@ (t)文本(-0.3,0.3,GydF4y2Ba“计时器:”GydF4y2Ba+ num2str (t, 2) +GydF4y2Ba“s”GydF4y2Ba),GydF4y2Ba'AnimationRange'GydF4y2Ba[0 5 * T]);GydF4y2Ba
输入命令GydF4y2BaPlayanimation.GydF4y2Ba
播放摆动行动的动画。GydF4y2Ba
为了理解摆锤的非线性运动,通过使用总能量方程来可视化摆路径。总能量是保守的。GydF4y2Ba
使用三角恒等式GydF4y2Ba 和关系GydF4y2Ba 改写成比例的能量。GydF4y2Ba
由于能量守恒,摆的运动可以用相空间中恒定的能量路径来描述。相空间是一个有坐标的抽象空间GydF4y2Ba
和GydF4y2Ba
。使用的可视化这些路径GydF4y2BaFcontour.GydF4y2Ba
。GydF4y2Ba
信谊GydF4y2Baθ.GydF4y2Batheta_t.GydF4y2Baomega_0GydF4y2Bae(θ,theta_t,omega_0)=(1/2)*(theta_t ^ 2 +(2 * omega_0 * sin(θ/ 2))^ 2);Eplot(θ,theta_t)= subs(e,omega_0,omega_0value);数字;fc = fcontour(Eplot(pi * theta,2 * omega_0value * theta_t),2 * [ - 1 1 -1 1],GydF4y2Ba…GydF4y2Ba“线宽”GydF4y2Ba2,GydF4y2Ba'左侧是'GydF4y2Ba,0:5:50,GydF4y2Ba'网格长度'GydF4y2Ba,1 + 2 ^ 8);网格GydF4y2Ba在GydF4y2Ba;标题(GydF4y2Ba“阶段空间中的恒定能量轮廓(\ theta vs. \ theta_t)”GydF4y2Ba);Xlabel(GydF4y2Ba'\ theta / \ pi'GydF4y2Ba);ylabel (GydF4y2Ba'\ theta_t / 2 \ omega_0'GydF4y2Ba);GydF4y2Ba
能量等高线是对称的GydF4y2Ba 轴和GydF4y2Ba 轴,沿GydF4y2Ba 轴。该图显示了两个不同行为的区域。GydF4y2Ba
轮廓绘图的较低能量靠近自己。摆锤在两个最大角度和速度之间来回摇摆。摆锤的动能不足以克服重力能量并使摆锤能够制造全环。GydF4y2Ba
等高线图的更高能量不会封闭它们自己。钟摆总是以一个角的方向运动。钟摆的动能足以克服重力能,使钟摆做一个完整的循环。GydF4y2Ba
运动的非线性方程是二阶微分方程。用使用的数字地解决这些方程GydF4y2Ba数值GydF4y2Ba
解算器。因为GydF4y2Ba数值GydF4y2Ba
只接受一阶系统,将系统简化为一阶系统。然后,生成作为输入的函数句柄GydF4y2Ba数值GydF4y2Ba
。GydF4y2Ba
把二阶ODE写成一阶ODE的方程组。GydF4y2Ba
信谊GydF4y2Baθ(t)GydF4y2Batheta_t(t)GydF4y2Baomega_0GydF4y2Baeqs = [diff(theta)== theta_t;差异(theta_t)== -omega_0 ^ 2 * sin(θ)]GydF4y2Ba
eqs(t)=GydF4y2Ba
方程式=潜艇(方程式,omega_0 omega_0Value);var = [theta, theta_t];GydF4y2Ba
找到质量矩阵GydF4y2BamGydF4y2Ba
系统和方程的右侧GydF4y2BaFGydF4y2Ba
。GydF4y2Ba
[M F] = massMatrixForm(方程式一样,var)GydF4y2Ba
m =GydF4y2Ba
F =GydF4y2Ba
mGydF4y2Ba
和GydF4y2BaFGydF4y2Ba
请参阅此表格。GydF4y2Ba
要简化进一步计算,请以表单重写系统GydF4y2Ba 。GydF4y2Ba
f = m \ fGydF4y2Ba
f =GydF4y2Ba
转换GydF4y2BaFGydF4y2Ba
使用Matlab功能手柄GydF4y2Ba助手GydF4y2Ba
。得到的函数句柄是MATLAB ODE求解器的输入GydF4y2Ba数值GydF4y2Ba
。GydF4y2Ba
f = odeFunction(f, vars)GydF4y2Ba
f =GydF4y2Bafunction_handle与价值:GydF4y2Ba@(t,IN2)[IN2(2,:); SIN(IN2(1,:))。*( - 9.81e + 2. / 1.0e + 2)]GydF4y2Ba
求解封闭能量轮廓的ODEGydF4y2Ba数值GydF4y2Ba
。GydF4y2Ba
从能量等高线图来看,闭合等高线满足条件GydF4y2Ba
那GydF4y2Ba
。存储初始条件GydF4y2Ba
和GydF4y2Ba
在变量中GydF4y2Bax0GydF4y2Ba
。GydF4y2Ba
x0 = [0;1.99 * omega_0Value];GydF4y2Ba
指定一个从0秒到10秒的时间间隔来查找解。这个间隔使钟摆可以经过两个完整的周期。GydF4y2Ba
tInit = 0;tFinal = 10;GydF4y2Ba
解决ODE。GydF4y2Ba
ode45(f,[tInit tFinal],x0)GydF4y2Ba
溶胶=GydF4y2Ba结构与字段:GydF4y2Ba解算:'ode45' extdata: [1x1 struct] x: [1x45 double] y: [2x45 double] stats: [1x1 struct] idata: [1x1 struct]GydF4y2Ba
: sols.y (1)GydF4y2Ba
表示角位移GydF4y2Ba
和GydF4y2Ba: sols.y (2)GydF4y2Ba
表示角速度GydF4y2Ba
。GydF4y2Ba
绘制闭合路径解决方案。GydF4y2Ba
数字;yyaxis.GydF4y2Ba剩下GydF4y2Ba;绘图(Sols.x,Sols.y(1,:),GydF4y2Ba'-O'GydF4y2Ba);ylabel (GydF4y2Ba“\θ(rad)”GydF4y2Ba);yyaxis.GydF4y2Ba对GydF4y2Ba;plot(sols.x,sols.y(2,:),GydF4y2Ba'-O'GydF4y2Ba);ylabel (GydF4y2Ba'\ theta_t(rad / s)'GydF4y2Ba);网格GydF4y2Ba在GydF4y2Ba;标题(GydF4y2Ba“阶段空间中的封闭路径”GydF4y2Ba);Xlabel(GydF4y2Ba't(s)'GydF4y2Ba);GydF4y2Ba
想象钟摆的运动。GydF4y2Ba
x_pos = @(t)sin(deval(sols,t,1));y_pos = @(t)-cos(deval(sols,t,1));数字;Fanimator(@(t)绘图(x_pos(t),y_pos(t),GydF4y2Ba“柯”GydF4y2Ba那GydF4y2Ba'markerfacecolor'GydF4y2Ba那GydF4y2Ba'K'GydF4y2Ba));抓住GydF4y2Ba在GydF4y2Ba;fanimator(@(t) plot([0 x_pos(t)],[0 y_pos(t)],GydF4y2Ba“k -”GydF4y2Ba));Fanimator(@(t)文本(-0.3,1.5,GydF4y2Ba“计时器:”GydF4y2Ba+ num2str (t, 2) +GydF4y2Ba“s”GydF4y2Ba));GydF4y2Ba
输入命令GydF4y2BaPlayanimation.GydF4y2Ba
播放摆动行动的动画。GydF4y2Ba
求解开能等高线的ODEGydF4y2Ba数值GydF4y2Ba
。从能量轮廓图中,开放式轮廓满足条件GydF4y2Ba
那GydF4y2Ba
。GydF4y2Ba
x0 = [0;2.01 * omega_0Value];sos = ode45(f, [tInit, tFinal], x0);GydF4y2Ba
绘制开放能量轮廓的解决方案。GydF4y2Ba
数字;yyaxis.GydF4y2Ba剩下GydF4y2Ba;绘图(Sols.x,Sols.y(1,:),GydF4y2Ba'-O'GydF4y2Ba);ylabel (GydF4y2Ba“\θ(rad)”GydF4y2Ba);yyaxis.GydF4y2Ba对GydF4y2Ba;plot(sols.x,sols.y(2,:),GydF4y2Ba'-O'GydF4y2Ba);ylabel (GydF4y2Ba'\ theta_t(rad / s)'GydF4y2Ba);网格GydF4y2Ba在GydF4y2Ba;标题(GydF4y2Ba“相空间中的开路”GydF4y2Ba);Xlabel(GydF4y2Ba't(s)'GydF4y2Ba);GydF4y2Ba
想象钟摆的运动。GydF4y2Ba
x_pos = @(t)sin(deval(sols,t,1));y_pos = @(t)-cos(deval(sols,t,1));数字;Fanimator(@(t)绘图(x_pos(t),y_pos(t),GydF4y2Ba“柯”GydF4y2Ba那GydF4y2Ba'markerfacecolor'GydF4y2Ba那GydF4y2Ba'K'GydF4y2Ba));抓住GydF4y2Ba在GydF4y2Ba;fanimator(@(t) plot([0 x_pos(t)],[0 y_pos(t)],GydF4y2Ba“k -”GydF4y2Ba));Fanimator(@(t)文本(-0.3,1.5,GydF4y2Ba“计时器:”GydF4y2Ba+ num2str (t, 2) +GydF4y2Ba“s”GydF4y2Ba));GydF4y2Ba
输入命令GydF4y2BaPlayanimation.GydF4y2Ba
播放摆动行动的动画。GydF4y2Ba