Wolfram mathematica Mathematic有一个代码来画这个微分方程的图形吗?

Wolfram mathematica Mathematic有一个代码来画这个微分方程的图形吗?,wolfram-mathematica,Wolfram Mathematica,有人知道Mathematica代码可以跟踪下面的图表吗 这是图的方程,一个常系数的二阶线性微分方程: 以下是由该方程式绘制的图表: 引用《时间序列分析与预测》一书中的示例: 。。。式中,δt是一个脉冲δ函数,与豌豆丸一样 时间t=0迫使摆锤偏离平衡状态,a为 豌豆影响的大小。很容易想象曲线 由这个二阶微分方程所追踪的是一个阻尼方程 时间的正弦函数,但如果摩擦力或粘度 如果足够大,过阻尼摆可能会逐渐变小 沿着指数曲线休息,而不穿过 中心线 注意,对于零初始条件,另一种选择是使用Mathematic

有人知道Mathematica代码可以跟踪下面的图表吗

这是图的方程,一个常系数的二阶线性微分方程:

以下是由该方程式绘制的图表:

引用《时间序列分析与预测》一书中的示例:

。。。式中,δt是一个脉冲δ函数,与豌豆丸一样 时间t=0迫使摆锤偏离平衡状态,a为 豌豆影响的大小。很容易想象曲线 由这个二阶微分方程所追踪的是一个阻尼方程 时间的正弦函数,但如果摩擦力或粘度 如果足够大,过阻尼摆可能会逐渐变小 沿着指数曲线休息,而不穿过 中心线

注意,对于零初始条件,另一种选择是使用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]
更新

严格地说,上面的DSolve的结果不是这个问题的手工推导所能找到的结果。正确的解决方案如下

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]
另请参见以供参考

正确的解析解如下所示:

这是我在第一章中针对这个问题和类似情况得出的结论

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

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]
如果使用DSolve将上述绘图与上面显示的第一个绘图进行比较,可以看到t=0附近的差异

注意,对于零初始条件,另一种选择是使用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]
更新

严格地说,上面的DSolve的结果不是这个问题的手工推导所能找到的结果。正确的解决方案如下

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]
另请参见以供参考

正确的解析解如下所示:

这是我在第一章中针对这个问题和类似情况得出的结论

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

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]

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

来吧,现在…@Jack Maney我不能让这个在Mathematica工作。我想举一个例子,说明如何将这样的一般方程转换成我可以在Mathematica中使用的形式。你如何在Mathematica中指定脉冲函数?你有超过3600的声誉。到现在为止,您应该对堆栈溢出有足够的了解,知道这些问题在逻辑上等同于gimmeh-teh-codez,plz?没有任何迹象表明OP已经投入了任何努力,一般不会飞到这里。@Gravitas,也许这个:那么:相关的,来吧,现在…@Jack Maney,我在Mathematica无法实现这个。我想举一个例子,说明如何将这样的一般方程转换成我可以在Mathematica中使用的形式。你如何在Mathematica中指定脉冲函数?你有超过3600的声誉。到现在为止,您应该对堆栈溢出有足够的了解,知道这些问题在逻辑上等同于gimmeh-teh-codez,plz?由于没有任何迹象表明OP已经投入了任何努力,所以通常不会飞到这里。@Gravitas,也许这是:相关的