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

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

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

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

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

Используйте '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 моделирует движение прыгающего мяча. Функция событий останавливает интегрирование каждый раз возвраты мяча, и интегрирование затем перезапускает с новыми начальными условиями. Когда мяч возвращается, остановки интегрирования и перезапуски несколько раз.

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

$$\begin{array}{cl} y'_1 &= y_2\\ y'_2 &= -9.8 . \end{array}$$

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

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 симулирует ограниченную задачу трех тел, где одно тело вращается вокруг двух намного больших тел. Функция событий определяет точки в орбите, где орбитальное тело является самым близким и самым дальним далеко. Поскольку значение функции событий является тем же самым в самых близких и самых дальних точках орбиты, направление нулевого пересечения - то, что отличает их.

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

$$\begin{array}{cl} y'_1 &= y_3\\ y'_2 &= y_4 \\ y'_3 &= 2y_4 + y_1 -
\frac{\mu^* (y_1 + \mu)}{r_1^3} - \frac{\mu(y_1 - \mu^*}{r_2^3}\\ y'_4 &=
-2y_3 + y_2 - \frac{\mu^* y_2}{r_1^3} - \frac{\mu y_2}{r_2^3},
\end{array}$$

где

$$\begin{array}{cl} \mu &= 1/82.45\\ \mu^* &= 1-\mu\\ r_1 &=
\sqrt{(y_1+\mu)^2+y_2^2}\\ r_2 &= \sqrt{(y_1-\mu^*)^2 +
y_2^2}.\end{array}$$

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

Функция событий вкладывается в 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.

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

|

Похожие темы