В SimBiology событие является дискретным переходом в значении величины или выражения в модели. Этот дискретный переход происходит, когда настраиваемое условие становится верным. Условием может быть определенное время и/или не зависящее от времени условие. Такие условия определены в Event object.
Объект события имеет Trigger свойство, указывающее условие, которое должно иметь значение true для запуска события для выполнения.
Типичные триггеры событий:
Определенное время моделирования - укажите, что событие должно изменять количества или значения видов или параметров. Например, в момент времени = 5 с увеличение количества ингибитора выше порогового значения для ингибирования данной реакции.
В ответ на состояние или изменения в системе - изменение количеств/значений определенных видов/параметров в ответ на события, которые не привязаны к какому-либо конкретному времени. Например, когда виды A достигает суммы 30 молекулы, удвоенное значение константы скорости реакции k. Или когда температура достигнет 42
°C, ингибировать конкретную реакцию, устанавливая ее скорость реакции равной нулю.
Примечание
В настоящее время события не могут запускаться в момент времени = 0. Тем не менее, вы можете получить событие, чтобы произойти сразу после времени = 0 с помощью time > timeSmall как триггер события, где timeSmall может составлять крошечную долю секунды, например 1,0 пикосекунды.
Событие имеет EventFcns свойство, указывающее, что происходит при запуске события. Функции события могут варьироваться от простых до сложных. Например, функция события может:
Изменение значений отсеков, видов или параметров.
Удвоить значение константы скорости реакции.
Trigger свойство события указывает условие, которое должно стать истинным для выполнения события. Обычно условие использует комбинацию реляционных и логических операторов для построения выражения триггера.
Триггер может содержать ключевое слово time и реляционные операторы для запуска события, которое происходит в определенное время во время моделирования. Например, time >= x. Для получения дополнительной информации см. Trigger собственность.
Используйте синтаксис MATLAB ® для записи выражений для триггеров событий. Обратите внимание, что выражение должно быть одной инструкцией MATLAB, которая возвращает логическое выражение. В конце выражения не требуется точка с запятой или запятая. MATLAB использует определенный приоритет оператора для вычисления выражений триггера. Уровни приоритета определяют порядок, в котором MATLAB вычисляет выражение. В пределах каждого уровня приоритета операторы имеют одинаковый приоритет и оцениваются слева направо. Дополнительные сведения об оценке реляционных и логических операторов см. в разделе Реляционные и логические операции.
Некоторые примеры триггеров:
| Спусковой механизм | Объяснение |
|---|---|
(time >= 5) && (speciesA < 1000) | Выполните событие, если выполняется следующее условие: Время больше или равно
Совет Использование
|
(time >= 5) || (speciesA < 1000) | Выполните событие, если выполняется следующее условие: Время больше или равно |
(s1 >= 10.0) || (time >= 250) && (s2 < 5.0E17) | Выполните событие, если выполняется следующее условие: Виды, Из-за приоритета оператора выражение обрабатывается так, как если бы оно было Таким образом, всегда целесообразно использовать круглые скобки для явного указания предполагаемого приоритета операторов. |
((s1 >= 10.0) || (time >= 250)) && (s2 < 5.0E17) | Выполните событие, если выполняется следующее условие: Разновидности |
((s1 >= 5000.0) && (time >= 250)) || (s2 < 5.0E17) | Выполните событие, если выполняется следующее условие: Разновидности |
Совет
Если UnitConversion , и у вашей модели есть какое-либо событие, следуйте рекомендации ниже.
Безразмерность любых параметров, используемых в событии Trigger если они еще не безразмерны. Например, предположим, что у вас есть триггер x > 1, где x - концентрация вида в моль/литр. Безразмерность x путем масштабирования (деления) с помощью константы, например x/x0 > 1где x0 - параметр, определенный как 1,0 моль/литр. Обратите внимание, что x не должен иметь ту же единицу измерения, что и константа x0, но должен быть совместим с ней по размерам. Например, единица x может быть пикомоль/литр вместо моль/литр.
EventFcns свойство события указывает, что происходит при запуске события. Функцию события можно использовать для изменения значения раздела, вида или параметра, либо можно указать сложные задачи путем вызова пользовательской функции или сценария.
Используйте синтаксис MATLAB для определения выражений для функций событий. Выражение должно быть одной инструкцией назначения MATLAB, включающей =или массив ячеек таких операторов. В конце выражения не требуется точка с запятой или запятая.
Ниже приведены правила записи выражений для функций событий.
| EventFcn | Объяснение |
|---|---|
speciesA = speciesB | При выполнении события установите величину speciesA равно speciesB. |
k = k/2 | При выполнении события уменьшите значение константы скорости вдвое. k. |
{'speciesA = speciesB','k = k/2'} | При выполнении события установите величину speciesA равно speciesBи уменьшить вдвое значение константы скорости k. |
kC = my_func(A,B,kC) | При выполнении события вызовите пользовательскую функцию. my_func(). Эта функция принимает три аргумента: первые два аргумента являются текущими количествами двух видов (A и B) во время моделирования и третий аргумент - текущее значение параметра, kC. Функция возвращает измененное значение kC в качестве выхода. |
Для моделирования моделей, содержащих события, используйте детерминированный (ODE или SUNDIALS) решатель или стохастический ssa решатель. Другие стохастические решатели не поддерживают события. Дополнительные сведения см. в разделе Выбор вычислителя моделирования.
Рассмотрим пример простого события, в котором указано, что 4s, вы хотите назначить значение 10 к разновидностям A.

В time = 4 s триггер становится истинным, и событие выполняется. На предыдущем рисунке при условии, что 0 имеет значение false и 1 true, когда триггер становится истинным, количество видов A имеет значение 10. Теоретически, с совершенным решателем, событие будет выполняться точно на time = 4.00 s. На практике существует очень минутная задержка (например, можно заметить, что событие выполняется на time = 4.00001 s). Таким образом, необходимо указать, что триггер может стать истинным в или после 4s, что является time >= 4 s.
| Спусковой механизм | EventFcn |
|---|---|
time >= 4 | A = 10 |
Точка, в которой триггер становится истинным, называется восходящей кромкой. События SimBiology ® выполняют EventFcn
только на поднимающихся краях.
Триггер вычисляется на каждом шаге времени для проверки того, переходит ли условие, указанное в триггере, с значения false на значение true. Решатель обнаруживает и отслеживает падающие кромки, то есть когда триггер становится ложным, поэтому, если встречается другой передний фронт, событие выполняется повторно. Если триггер уже имеет значение true до начала моделирования, то событие не выполняется в начале моделирования. Событие не выполняется до тех пор, пока решатель не столкнется с передним фронтом. Очень редко решатель может пропустить передний край. Примером этого является случай, когда передний край следует очень быстро после заднего края, и размер шага приводит к пропуску решателем точки перехода.
Если триггер становится верным точно во время остановки моделирования, событие может выполняться или не выполняться. Если требуется выполнить событие, увеличьте время остановки.
Примечание
Поскольку передний фронт является мгновенным и изменяет состояние системы, существует два значения для состояния одновременно. Таким образом, данные моделирования содержат состояние до и после события, но обе точки имеют одно и то же значение. Это приводит к множеству значений состояния системы в один момент времени.
Когда два или более условий запуска одновременно становятся истинными, решатель выполняет события последовательно в порядке, в котором они перечислены в модели. Можно переупорядочить события с помощью reorder способ. Например, рассмотрим этот случай.
| Номер события | Trigger | EventFcn |
|---|---|---|
| 1 | SpeciesA >= 4 | SpeciesB = 10 |
| 2 | SpeciesC >= 15 | SpeciesB = 25 |
Решатель пытается найти передний край для этих событий в пределах определенного уровня допуска. Если это приводит к обоим событиям, происходящим одновременно, то значение SpeciesB после временного шага, на котором происходят эти два события, будет 25. Если изменить порядок событий на обратный, то значение SpeciesB после временного шага, на котором происходят эти два события, будет 10.
Рассмотрим пример включения функций событий, изменяющих компоненты модели зависимым образом. Например, функция события в событии 2 предусматривает, что SpeciesB принимает значение SpeciesC.
| Номер события | Trigger | EventFcn |
|---|---|---|
| 1 | SpeciesA >= 4 | SpeciesC = 10 |
| 2 | time >= 15 | SpeciesB = SpeciesC |
Событие 1 и событие 2 могут произойти одновременно.
Если событие 1 и событие 2 не происходят одновременно, то при запуске события 2 SpeciesB присваивается значение, которое SpeciesC имеет во время триггера события.
Если событие 1 и событие 2 происходят одновременно, решатель сначала выполняет событие 1, а затем - событие 2. В этом примере, если SpeciesC = 15 когда события инициируются, после выполнения событий, SpeciesC = 10 и SpeciesB = 10.
Рассмотрим функцию события, в которой указывается, что значение компонента модели (SpeciesB) зависит от значения компонента модели (SpeciesA), но SpeciesA также изменяется функцией события.
Trigger | EventFcn |
|---|---|
time >= 4 | {'SpeciesA = 10, SpeciesB = SpeciesA'} |
Решатель сохраняет значение SpeciesA на переднем крае и перед выполнением каких-либо функций события и использует это сохраненное значение для назначения SpeciesB его ценность. Так в этом примере, если SpeciesA = 15 в момент запуска события, после его выполнения, SpeciesA = 10 и SpeciesB = 15.
В следующем примере событие 1 включает выражение в функцию события, которое вызывает событие 2 (при условии, что SpeciesA имеет сумму менее 5 при выполнении события 1).
| Номер события | Trigger | EventFcn |
|---|---|---|
| 1 | time >= 5 | {'SpeciesA = 10, SpeciesB = 5'} |
| 2 | SpeciesA >= 5 | SpeciesC = SpeciesB |
При запуске события 1 решатель оценивает и выполняет событие 1 с результатом, который SpeciesA = 10 и SpeciesB = 5. Теперь триггер для события 2 становится истинным, и решатель выполняет функцию события для события 2. Таким образом, SpeciesC = 5 в конце выполнения этого события.
Таким образом, можно иметь каскады событий произвольной длины, например, Событие 1 запускает Событие 2, которое, в свою очередь, запускает Событие 3 и так далее.
В некоторых ситуациях серия событий может вызвать каскад, который становится циклическим. После запуска циклического набора событий единственным способом остановить моделирование является нажатие клавиш Ctrl + C. Будут потеряны все данные, полученные в текущем моделировании. Вот пример циклических событий. В этом примере предполагается, чтоSpecies B <= 4 в начале цикла.
| Номер события | Trigger | EventFcn |
|---|---|---|
| 1 | SpeciesA > 10 | {'SpeciesB = 5', 'SpeciesC = 1'} |
| 2 | SpeciesB > 4 | {'SpeciesC = 10', 'SpeciesA = 1'} |
| 3 | SpeciesC > 9 | {'SpeciesA = 15', 'SpeciesB = 1'} |
Решатели, поставляемые с SimBiology, дают неточные результаты, когда следующие выражения не являются непрерывными и дифференцируемыми:
Правило повторного назначения
Алгебраическое правило
Правило тарифа
Скорость реакции
Убедитесь, что предыдущие выражения являются непрерывными и дифференцируемыми, или используйте события для сброса решателя в разрыве, как описано в разделе Детерминированное моделирование модели, содержащей разрыв.