我对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;
(初始位移为2米)。
s = NDSolve[{eq1, eq2, eq3}, x, {t, 0, 30}]
非常感谢...
答案 0 :(得分:1)
您需要为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}]
答案 1 :(得分: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编程。祝你好运!!