Местоположение события ОДУ

Что такое Местоположение События?

Часть трудности при решении некоторых систем ОДУ определяет подходящее время, чтобы остановить решение. Итоговое время в интервале интегрирования может быть задано определенным событием а не номером. Примером является яблоко, падающее от дерева. Решатель ОДУ должен остановиться, если яблоко поражает землю, но вы не можете знать, когда то событие имело бы место заранее. Точно так же некоторые проблемы включают события, которые не отключают решение. Примером является луна, вращающаяся вокруг планеты. В этом случае вы не можете хотеть останавливать интегрирование рано, но вы все еще хотите обнаружить каждый раз, когда луна завершает один период вокруг большего тела.

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

Запись функции события

Используйте опцию 'Events' функции odeset, чтобы задать функцию события. Функция события должна иметь общую форму

[value,isterminal,direction] = myEventsFcn(t,y)

В случае ode15i функция события должна также принять третий входной параметр для yp.

value выходных аргументов, isterminal и direction являются векторами, i которых th элемент соответствует i th событие:

  • value(i) является математическим выражением, описывающим i th событие. Событие имеет место, когда value(i) равен нулю.

  • isterminal(i) = 1, если интегрирование должно отключить, когда i th событие происходит. В противном случае это - 0.

  • direction(i) = 0, если все нули должны быть расположены (значение по умолчанию). Значение +1 определяет местоположение только нулей, где функция события увеличивается, и -1 определяет местоположение только нулей, где функция события уменьшается. Задайте direction = [], чтобы использовать значение по умолчанию 0 для всех событий.

Снова, рассмотрите случай яблока, падающего от дерева. ОДУ, которое представляет падающее тело,

y'' = −1+y'  2 ,

с начальными условиями y (0) =1 и y' (0) =0. Можно использовать функцию события, чтобы определить, когда y (t) =0, который является, когда яблоко поражает землю. Для этой проблемы функция события, которая обнаруживает, когда яблоко поражает землю,

function [position,isterminal,direction] = appleEventsFcn(t,y)
position = y(1); % The value that we want to be zero
isterminal = 1;  % Halt integration 
direction = 0;   % The zero can be approached from either direction

Информация о событии

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

[t,y,te,ye,ie] = odeXY(odefun,tspan,y0,options)

Три дополнительных выходных параметров, возвращенные решателем, соответствуют обнаруженным событиям:

  • te является вектором - столбцом времен, в которые события имели место.

  • ye содержит значение решения в каждое из времен события в te.

  • ie содержит индексы в вектор, возвращенный функцией события. Значения указывают, какое событие решатель обнаружил.

Также можно вызвать решатель с единственным выводом, как

sol = odeXY(odefun,tspan,y0,options)

В этом случае информация о событии сохранена в структуре как sol.te, sol.ye и sol.ie т.е. .

Ограничения

Находящий корень механизм, используемый решателем ОДУ в сочетании с функцией события, имеет эти ограничения:

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

  • Если больше чем одно терминальное событие имеет место во время первого шага, то только первые регистры события и решатель продолжают интегрироваться.

  • Нули определяются пересечениями знака между шагами. Поэтому нули функций с четным числом пересечений между шагами могут быть пропущены.

Если прошедшие события шагов решателя, попытайтесь уменьшить RelTol и AbsTol, чтобы улучшить точность. Также установите MaxStep помещать верхнюю границу в размер шага. Корректировка tspan не изменяет шаги, сделанные решателем.

Простое местоположение события: Прыгающий мяч

Этот пример показывает, как записать простую функцию события для использования с решателем ОДУ. Файл в качестве примера ballode моделирует движение прыгающего мяча. Функция событий останавливает интегрирование каждый раз возвраты шара, и интегрирование затем перезапускает с новыми начальными условиями. Когда шар возвращается, остановки интегрирования и перезапуски несколько раз.

Уравнения для прыгающего мяча

Возврат шара происходит, когда высота шара равна, чтобы обнулить после уменьшения. Функция событий, которая кодирует это поведение,

function [value,isterminal,direction] = bounceEvents(t,y)
value = y(1);     % Detect height = 0
isterminal = 1;   % Stop the integration
direction = -1;   % Negative direction only

Введите ballode, чтобы запустить пример и проиллюстрировать использование функции событий, чтобы моделировать возврат шара.

ballode

Усовершенствованное местоположение события: Ограниченная задача трех тел

Этот пример показывает, как использовать направленные компоненты функции события. orbitode файла в качестве примера моделирует ограниченную задачу трех тел, где одно тело вращается вокруг двух намного больших тел. Функция событий определяет точки в орбите, где орбитальное тело является самым близким и самым дальним далеко. Поскольку значение функции событий является тем же самым в самых близких и самых дальних точках орбиты, направление нулевого пересечения - то, что отличает их.

Уравнения для ограниченной задачи трех тел

где

Первые два компонента решения являются координатами тела бесконечно малой массы, таким образом строение график один против другого дает орбиту тела.

Функция событий, вложенная в orbitode.m, ищет два события. Одно событие определяет местоположение точки максимального расстояния от отправной точки, и другой определяет местоположение точки, где космический корабль возвращается к отправному вопросу. События расположены точно, даже при том, что размеры шага, используемые интегратором, не определяются местоположениями событий. В этом примере способность задать направление нулевого пересечения очень важна. И точка возвращается к отправному вопросу и точке максимального расстояния от отправной точки, имеют те же значения события, и направление пересечения используется, чтобы отличить их. Функция событий, которая кодирует это поведение,

function [value,isterminal,direction] = orbitEvents(t,y)
% dDSQdt is the derivative of the equation for current distance. Local
% minimum/maximum occurs when this value is zero.
dDSQdt = 2 * ((y(1:2)-y0(1:2))' * y(3:4)); 
value = [dDSQdt; dDSQdt];  
isterminal = [1;  0];         % stop at local minimum
direction  = [1; -1];         % [local minimum, local maximum]
end

Введите orbitode, чтобы запустить пример.

orbitode
This is an example of event location where the ability to
specify the direction of the zero crossing is critical.  Both
the point of return to the initial point and the point of
maximum distance have the same event function value, and the
direction of the crossing is used to distinguish them.

Calling ODE45 with event functions active...

Note that the step sizes used by the integrator are NOT
determined by the location of the events, and the events are
still located accurately.

Смотрите также

|

Похожие темы

Была ли эта тема полезной?