Найти нули для решений дифференциальных уравнений в Mathematica - PullRequest
2 голосов
/ 02 октября 2011

С учетом следующего кода:

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 ]

3 голосов
/ 02 октября 2011

На оригинальный вопрос ответил @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]}}
*)
2 голосов
/ 02 октября 2011

FindRoot работы

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