开发者

Find zeros for solutions to differential equations in Mathematica

Given the following code:

s := NDSolve[{x''[t] == -x[t], x[0] == 1, x'[0] == 1}, x, {t, 0, 5 }]
Plot[Evaluate[{x[t]} /. s], {t, 0, 3}]

This plots the solution to the differential equation. How would I开发者_高级运维 numerically solve for a zero of x[t] where t ranges between 0 and 3?


The original question was answered by @rcollyer. I am answering the question you posted in your first comment to rcollyer's answer:

But what if instead our s is "s := NDSolve[{x'[t]^2 == -x[t]^3 - x[t] + 1, x[0] == 0.5}, x, {t, 0, 5}]" Then the FindRoot function just gives back an error while the plot shows that there is a zero around 0.6 or so.

So:

s = NDSolve[{x'[t]^2 == -x[t]^3 - x[t] + 1, x[0] == 0.5}, 
             x, {t, 0, 1}, Method -> "StiffnessSwitching"];
Plot[Evaluate[{x[t]} /. s], {t, 0, 1}]
FindRoot[x[t] /. s[[1]], {t, 0, 1}]

Find zeros for solutions to differential equations in Mathematica

{t -> 0.60527}

Edit

Answering rcollyer's comment, the "second line" comes from the squared derivative, as in:

s = NDSolve[{x'[t]^2 == Sin[t], x[0] == 0.5}, x[t], {t, 0, Pi}];
Plot[Evaluate[{x[t]} /. s], {t, 0, Pi}]

Find zeros for solutions to differential equations in Mathematica

Coming from:

DSolve[{x'[t]^2 == Sin[t]}, x[t], t]
(*
{{x[t] -> C[1] - 2 EllipticE[1/2 (Pi/2 - t), 2]}, 
 {x[t] -> C[1] + 2 EllipticE[1/2 (Pi/2 - t), 2]}}
*)


FindRoot works

In[1]:=  FindRoot[x[t] /. s, {t, 0, 3}]
Out[1]:= {t -> 2.35619}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜