在Mathematica中找到零微分方程解的零点

时间:2011-10-02 00:47:18

标签: wolfram-mathematica differential-equations

给出以下代码:

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

这绘制了微分方程的解。如何在数值上求解x [t]的零,其中t的范围在0到3之间?

2 个答案:

答案 0 :(得分:3)

@rcollyer回答了原来的问题。我正在回答你在rcollyer回答的第一条评论中发布的问题:

  

但是如果相反我们的s是“s:= NDSolve [{x'[t] ^ 2 == -x [t] ^ 3 - x [t] + 1,x [0] == 0.5}, x,{t,0,5}]“然后FindRoot函数只返回一个错误,而图表显示大约0.6左右的零。

所以:

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

enter image description here

{t -> 0.60527}

修改

回答rcollyer的评论,“第二行”来自平方导数,如:

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

enter image description here

来自:

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

答案 1 :(得分:2)

FindRoot有效

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