Mathematica代码绘制这个微分方程的图形?

时间:2013-01-06 01:29:42

标签: wolfram-mathematica

有没有人知道跟踪下图的Mathematica代码?

这是图的等式,具有常系数的二阶线性微分方程:

enter image description here

以下是此等式所追踪的图表:

enter image description here

引用“时间序列分析和预测示例”一书:

  

...其中δ(t)是脉冲(delta)函数,就像豌豆射击一样   时间t = 0迫使钟摆远离其平衡,a是   豌豆的影响大小。很容易想象出曲线   由这个二阶微分方程描述的是阻尼   正弦函数的时间虽然,如果摩擦或粘度是   足够大,(过阻尼)摆可逐渐到来   按照指数曲线休息,没有穿过   中心线。

1 个答案:

答案 0 :(得分:6)

eq = m z''[t] + c z'[t] + k z[t] == a DiracDelta[t];
parms = {m -> 1, c -> .1, k -> 1, a -> 1};
sol = First@DSolve[{eq /. parms, z[0] == 1, z'[0] == 0}, z[t], t];
Plot[z[t] /. sol, {t, 0, 70}, PlotRange -> All, Frame -> True, 
 FrameLabel -> {{z[t], None}, {Row[{t, " (sec)"}], eq}}, 
 GridLines -> Automatic]

Mathematica graphics

请注意,对于零初始条件,另一个选项是使用Mathematica中的控制系统函数,如下所示

parms = {m -> 10, c -> 1.2, k -> 4.3, a -> 1};
tf = TransferFunctionModel[a/(m s^2 + c s + k) /. parms, s]
sol = OutputResponse[tf, DiracDelta[t], t];

Plot[sol, {t, 0, 60}, PlotRange -> All, Frame -> True, 
 FrameLabel -> {{z[t], None}, {Row[{t, " (sec)"}], eq}}, 
 GridLines -> Automatic]

Mathematica graphics

<强>更新

严格地说,上面DSolve的结果不是手动推导出这个问题的结果。正确的解决方案应如下所示

(另请参阅this

正确的分析解决方案由

提供

Mathematica graphics

我在here(第一章)中为此问题和类似案例派生。

使用上述解决方案,正确的响应将如下所示:

parms = {m -> 1, c -> .1, k -> 1, a -> 1};
w = Sqrt[k/m];
z = c/(2 m w);
wd = w Sqrt[1 - z^2];
analytical = 
  Exp[-z w t] (u0 Cos[wd t] + (v0 + (u0 z w))/wd Sin[wd t] + 
     a/(m wd) Sin[wd t]);
analytical /. parms /. {u0 -> 1, v0 -> 0}

 (* E^(-0.05 t) (Cos[0.998749 t] + 1.05131 Sin[0.998749 t]) *)

绘制它:

Plot[analytical /. parms /. {u0 -> 1, v0 -> 0}, {t, 0, 70}, 
 PlotRange -> All, Frame -> True, 
 FrameLabel -> {{y[t], None}, {Row[{t, " (sec)"}], 
    "analytical solution"}}, GridLines -> Automatic, ImageSize -> 300]

Mathematica graphics

如果您使用DSolve将上述情节与上面显示的第一个情节进行比较,您可以看到t=0附近的差异。