【问题标题】:Mathematica NDSolveMathematica NDSolve
【发布时间】:2012-04-29 17:18:01
【问题描述】:

我对 Mathematica 中的 NDSolve 函数有疑问。 我有一个由这两个方程定义的振荡器:

x' = v
v' = -x - u*v^3

其中 u 是某个常数。

如何创建解决此问题的 NDSolve?我尝试了以下代码(它必须取决于时间)但它不起作用:

eq1 = x'[t] == v;
eq2 = v' == -x[t] - u*v^3;
eq3 = x[0] == 2;

(初始位移为2m)。

s = NDSolve[{eq1, eq2, eq3}, x, {t, 0, 30}]

非常感谢...

【问题讨论】:

  • 如果您还有其他问题,这里的大多数专家现在已经转到Mathematica

标签: wolfram-mathematica differential-equations


【解决方案1】:

您需要注意,第一个等式一旦对t 进行微分,就可以用来代替v[t]。但随后第二个方程变为二阶 ODE,需要提供另一个额外的初始条件。我们会给

v[0]==x'[0]==some number

然后在解决x 的这个 ODE 之后,您可以恢复 v[t]==x'[t] 我以Manipulate 的形式为您提供解决方案,以便您清楚地了解几何情况。

(* First equation *)
v[t] = x'[t];
(* 
   Differentiate this equation once and substitute 
   for v[t] in the second equation
*)
Manipulate[
With[{u = Constant, der = derval}, 
     res = NDSolve[{x''[t] == -x[t] - u*x'[t]^3, x[0.] == 2,x'[0.] == der},
     x, {t, 0., 30.}] // First; 
     Plot[Evaluate[{x[t], v[t]} /. res], {t, 0, 30}, PlotRange -> All,
     Frame -> True,Axes -> None, ImageSize -> 600]
   ],
{{Constant, 0.,TraditionalForm@(u)}, 0.,3, .1},
{{derval, -3., TraditionalForm@(v[0] == x'[0])}, -3, 3, .1}
]

希望这对您有所帮助,但下次在您提问之前,您需要先复习一下理论,因为您可以看到您提出的问题涉及非常基础和初等数学,而不是 Mathematica 编程。祝你好运!!

【讨论】:

  • 谢谢!我想我没有 100% 清楚我必须做什么......对此感到抱歉。无论如何 - 干得好!
【解决方案2】:

您需要为u 指定一个数值以及v[t] 的初始条件:

u=1.0;
solution=NDSolve[{x'[t]==v[t], v'[t]==-x[t]-u v[t]^3,x[0]==2,v[0]==-1},{x,v},{t,0,1}]

Plot[{solution[[1,1,2]][t],solution[[1,2,2]][t]},{t,0,1}]

【讨论】:

    猜你喜欢
    • 2014-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多