Wolfram mathematica 在Mathematica中求微分方程解的零

Wolfram mathematica 在Mathematica中求微分方程解的零,wolfram-mathematica,differential-equations,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}] 这是微分方程的解。当t的范围在0到3之间时,我如何数值求解x[t]的零点 最初的问题由@rcollyer回答。我正在回答您在对rcollyer答案的第一次评论中提出的问题: 但是如果我们的s是“s:=NDSolve[{x'[t]^2==-x[t]^3-x[t]+1

给定以下代码:

s := NDSolve[{x''[t] == -x[t], x[0] == 1, x'[0] == 1}, x, {t, 0, 5 }]
Plot[Evaluate[{x[t]} /. s], {t, 0, 3}]
这是微分方程的解。当t的范围在0到3之间时,我如何数值求解x[t]的零点


最初的问题由@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左右有一个零

因此:

编辑

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

来自:

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

但是,如果我们的s是“s:=NDSolve[{x'[t]^2==-x[t]^3-x[t]+1,x[0]==0.5},x,{t,0,5}]”,那么FindRoot函数只会返回一个错误,而绘图显示0.6左右有一个零。@LiKun,我没有提到它,但这里使用
:=
SetDelayed
)没有任何意义。每次访问
s
时,它都会重新执行
NDSolve
,但对于您的系统来说,这不是必需的。改为使用
=
Set
),则
s
将只执行一次。@LiKun错误是什么?看起来有一个奇点可能会导致error@FooBah,不可能有奇点,它是一个具有通解的二阶线性微分方程,
a Sin[t]+b Cos[t]
@rcollyer我指的是你的第二部分:x'[t]^2===-x[t]^3-x[t]+1第二行从哪里来?
{t -> 0.60527}
s = NDSolve[{x'[t]^2 == Sin[t], x[0] == 0.5}, x[t], {t, 0, Pi}];
Plot[Evaluate[{x[t]} /. s], {t, 0, Pi}]
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]}}
*)