индекс местоположения события решателя ode в MATLAB - PullRequest
2 голосов
/ 01 октября 2011

Предположим, я пытаюсь решить систему дифференциальных уравнений с помощью решателя ode в MATLAB.

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

Я заметил, что в некоторых случаях количество ie, которое возвращается по месту одного из событий (ie - это индекс события, остановившего решатель, в моем случае это может быть 1, 2 или 3) не всегда одно число, а вектор с двумя элементами (обычно эти элементы идентичны)

В тех случаях, когда ie НЕ является скалярным, это ie(1) или ie(2) остановило решатель?

1 Ответ

2 голосов
/ 02 октября 2011

На самом деле, я заметил, что это происходит, когда симуляция останавливается из-за терминального события, а затем начинается снова с той же точки (начальное время и условия), которая остановилась.

Технически, из-за арифметических неточностей вначальные условия MATLAB повторно обнаруживает то же событие, которое заставило его ранее остановиться.MATLAB не способен различить это, НО он запрограммирован на НЕ останавливаться в событиях терминала, которые происходят сразу после первого успешного шага (для справки см. Функцию odezero).Тем не менее, он записывает событие.

Следовательно, в следующий раз, когда ода останавливается из-за терминального события, ie будет с добавлением с новым индексом, и вот когда (ипочему) ie - это вектор с двумя элементами.

...