次のコードがあるとします。
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] のゼロを数値的に解くにはどうすればよいでしょうか?
次のコードがあるとします。
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}]" 次に、プロットが 0.6 前後にゼロがあることを示している間、FindRoot 関数はエラーを返すだけです。
そう:
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}]

{t -> 0.60527}
編集
rcollyer のコメントに答えると、「2 行目」は次のように 2 乗導関数に由来します。
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]}}
*)
FindRoot作品
In[1]:= FindRoot[x[t] /. s, {t, 0, 3}]
Out[1]:= {t -> 2.35619}