Есть ли способ контролировать, насколько точно 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