Точность «событий» в оде45 в Matlab - PullRequest
2 голосов
/ 11 ноября 2011

Я рассматриваю проблему интеграции, пока не произойдет событие с использованием ode45 в Matlab, как здесь: http://www.mathworks.com/help/techdoc/math/f1-662913.html#f1-670140

Есть ли способ контролировать, насколько точно Matlab вычисляет местоположение события? В частности, события говорят вам решать ODE до тех пор, пока не будет найден ноль параметра value, но как мало будет value? Есть ли способ указать, насколько маленьким должен быть value, когда интеграция заканчивается?

1 Ответ

1 голос
/ 01 июля 2012

Есть ли способ контролировать, насколько точно Matlab вычисляет событие место

Краткий ответ: «Нет, но в любом случае это точность машины». Matlab ode45 (а остальные, как ode15s, ode23 и т. Д.) Вызывает функцию с именем odezero, которая выполняет работу по вычислению нулевых событий интеграторов ODE. Вот соответствующие строки в odezero, где установлен допуск:

tol = 128*max(eps(t),eps(tnew));
tol = min(tol, abs(tnew - t));

Из этого вы можете видеть две вещи: (1) нет никакой зависимости от каких-либо пользовательских параметров и (2) даже если у вас есть контроль, вы не можете установить его меньше, поскольку допуск составляет 128 * eps.

Есть ли способ указать, как мало я хочу, чтобы значение было, когда интеграция заканчивается?

Детекторы событий Matlab ODE не ищут value, стремящегося к нулю или приближающегося к нулю, он ищет его , пересекающий ноль. Если вы хотите найти конкретное значение ODE, пересекающее определенное значение, то функция событий возвращает разницу между решением и желаемым порогом.

...