2012-04-29 61 views
0

我有一個關於Mathematica中的NDSolve函數的問題。 我有一個由這兩個方程定義的振盪器: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}] 

非常感謝您......

+0

如果您還有其他問題,這裏的大多數專家現在已轉到[Mathematica.se]。 – rcollyer

回答

1

你需要注意的是,第一個等式一旦與t區分開來就可以用來代替v[t]。但是第二個方程變成二階ODE並且需要提供另一個額外的初始條件。我們會給

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

然後解決這個ODE的x後可以恢復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.,[email protected](u)}, 0.,3, .1}, 
{{derval, -3., [email protected](v[0] == x'[0])}, -3, 3, .1} 
] 

enter image description here

希望這有助於你,但下一次你問之前,你需要先刷了理論,你可以看到你問的擔憂很基本的,初等數學數學不是編程的問題。祝你好運!!

+0

謝謝!我想我沒有100%清楚我必須做什麼......對不起。無論如何 - 偉大的工作! – Smajl

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}] 

enter image description here