Точность событий в ode45 в Matlab

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

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


person db1234    schedule 11.11.2011    source источник


Ответы (1)


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

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

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

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

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

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

person drhagen    schedule 30.06.2012