exponenta event banner

События

Обзор

В SimBiology событие является дискретным переходом в значении количества или выражения в модели. Этот дискретный переход происходит, когда индивидуально настраиваемое условие становится верным. Условие может быть определенным временем и/или независимым от времени условием. Такие условия заданы в Event object.

Триггеры события

Объект-событие имеет свойство Trigger, которое задает условие, которое должно быть верно, чтобы инициировать событие, чтобы выполниться.

Типичные триггеры события:

  • Определенное время симуляции — Указывает, что событие должно изменить суммы или значения разновидностей или параметров. Например, во время = 5 с, увеличьте сумму разновидности ингибитора выше порога, чтобы запретить данную реакцию.

  • В ответ на состояние или изменения в системе — суммы/значения Изменения определенных разновидностей/параметров в ответ на события, которые не связываются ни к какому определенному времени. Например, когда разновидность A достигает суммы молекул 30, дважды значения скорости реакции постоянный k. Или когда температура достигает 42 °C, подавите конкретную реакцию путем обнуления ее скорости реакции.

Примечание

В настоящее время события не могут быть инициированы во время = 0. Однако можно заставить событие происходить сразу после времени = 0 при помощи time > timeSmall как триггер события, где timeSmall может быть крошечной частью секунды, такой как 1,0 пикосекунды.

Функции события

Событие имеет свойство EventFcns, которое задает то, что происходит, когда событие инициировано. Функции события могут расположиться от простого, чтобы объединить. Например, событие функциональная сила:

  • Измените значения отсеков, разновидностей или параметров.

  • Удвойте значение постоянной скорости реакции.

Определение триггеров события

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

Триггер может содержать ключевое слово time и операторы отношения, чтобы инициировать событие, которое происходит в определенное время во время симуляции. Например, time >= x. Для получения дополнительной информации смотрите свойство Trigger.

Используйте синтаксис MATLAB®, чтобы записать выражения для триггеров события. Обратите внимание на то, что выражение должно быть одним выражением MATLAB, которое возвращает логическое. Никакая точка с запятой или запятая не необходимы в конце выражения. MATLAB использует определенный приоритет оператора, чтобы выполнить триггерные выражения. Уровни приоритета определяют порядок, в котором MATLAB выполняет выражение. В каждом уровне приоритета операторы имеют одинаковый приоритет и оценены слева направо. Чтобы найти больше информации о том, как операторы отношения и логические операторы оценены, смотрите Реляционные операции (MATLAB) и Логические операции (MATLAB).

Некоторые примеры триггеров:

ТриггерОбъяснение
(time >= 5) && (speciesA < 1000)Выполните событие, когда следующее условие станет верным:

Время больше, чем или равно 5, и speciesA - меньше чем 1 000.

Совет

Используя && (вместо &) оценивает первую часть выражения для того, является ли оператор TRUE или FALSE и пропусками, оценивающими второй оператор, если этот оператор является ложным.

(time >= 5) || (speciesA < 1000)Выполните событие, когда следующее условие станет верным:

Время больше, чем или равно 5, или если speciesA - меньше чем 1 000.

(s1 >= 10.0) || (time >= 250) && (s2 < 5.0E17)Выполните событие, когда следующее условие станет верным:

Разновидности, s1 больше, чем или равен 10.0 или, время больше, чем или равно 250, и разновидность s2 является меньше, чем 5.0E17.

Из-за приоритета оператора обработано выражение, как будто это был (s1 >=10.0) || ((time>= 250) && (s2<5.0E17)).

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

((s1 >= 10.0) || (time >= 250)) && (s2 < 5.0E17)Выполните событие, когда следующее условие станет верным:

Разновидность s1 больше, чем или равна 10, или время больше, чем или равно 250, и разновидность s2 является меньше, чем 5.0E17.

((s1 >= 5000.0) && (time >= 250)) || (s2 < 5.0E17)Выполните событие, когда следующее условие станет верным:

Разновидность s1 больше, чем или равна 5000, и время больше, чем или равно 250, или разновидность s2 является меньше, чем 5.0E17.

Совет

Если UnitConversion включен, и ваша модель имеет любое событие, следуйте рекомендации ниже.

Не определите размерность любые параметры, используемые в конечном счете trigger, если они не являются уже безразмерными. Например, предположите, что у вас есть триггер x > 1, где x является концентрацией разновидностей при родинке/литр. Не определите размерность x путем масштабирования (деление) его с константой, такой как x/x0 > 1, где x0 является параметром, заданным как 1,0 родинки/литр. Обратите внимание на то, что x не должен иметь того же модуля как постоянный x0, но должен быть размерностно сопоставим с ним. Например, модуль x может быть picomole/liter вместо родинки/литр.

Определение функций события

Свойство 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 как его вывод.

Решатели симуляции для моделей, содержащих События

Чтобы моделировать модели, содержащие события, используйте детерминированное (ОДУ или SUNDIALS) решатель или стохастический решатель ssa. Другие стохастические решатели не поддерживают события. Для получения дополнительной информации смотрите Выбор Simulation Solver.

Как оценены События

Рассмотрите пример простого события, где вы указываете, что в 4s, хотите присвоить значение 10 к разновидностям A.

В time = 4 s триггер становится верным, и событие выполняется. В предыдущей фигуре, принимающей, что 0 является ложным и 1 верен, когда триггер становится верным, сумма разновидностей A установлена в 10. В теории, с совершенным решателем, событие было бы выполнено точно в time = 4.00 s. На практике существует очень мелкая задержка (например, вы можете заметить, что событие выполняется в time = 4.00001 s). Таким образом необходимо указать, что триггер может стать верным в или после 4s, который является time >= 4 s.

ТриггерEventFcn
time >= 4A = 10

Точка, в которой триггер становится верным, называется rising edge. События SimBiology® выполняют EventFcn только в возрастающих ребрах.

Триггер оценен на каждом временном шаге, чтобы проверять, задало ли условие в триггерных переходах от лжи до истины. Решатель обнаруживает и отслеживает falling edges, который является, когда триггер становится ложным, поэтому если с другим возрастающим ребром сталкиваются, событие повторно выполняется. Если триггер уже верен, прежде чем симуляция запустится, то событие не выполняется в начале симуляции. Событие не выполняется, пока решатель не сталкивается с возрастающим ребром. Очень редко решатель может пропустить возрастающее ребро. Пример этого - когда возрастающее ребро следует очень быстро после падающего ребра и результатов размера шага в решателе, пропускающем точку перехода.

Если триггер становится верным точно во времени остановки симуляции, событие может или не может выполниться. Если вы хотите, чтобы событие выполнило, увеличило время остановки.

Примечание

Поскольку возрастающее ребро мгновенно и изменяет системное состояние, существует два значения для состояния одновременно. Данные моделирования таким образом содержат состояние до и после события, но обе точки являются одновременно значением. Это приводит к нескольким значениям системного состояния в один момент вовремя.

Оценка одновременных Событий

Когда два или больше триггерных условия одновременно становятся верными, решатель выполняет события последовательно в порядке, в котором они перечислены в модели. Можно переупорядочить события с помощью метода reorder. Например, рассмотрите этот случай.

Номер событияTriggerEventFcn
1SpeciesA >= 4SpeciesB = 10
2SpeciesC >= 15SpeciesB = 25

Решатель пытается найти возрастающее ребро для этих событий в определенном уровне допуска. Если это приведет к обоим событиям, происходящим одновременно, то значением SpeciesB после временного шага, в котором эти два события имеют место, будет 25. Если вы переупорядочите события, чтобы инвертировать порядок события, то значением SpeciesB после временного шага, в котором эти два события имеют место, будет 10.

Рассмотрите пример, в который вы включаете функции события, которые изменяют компоненты модели зависимым способом. Например, функция события в Событии 2, предусматривает, что SpeciesB принимает значение SpeciesC.

Номер событияTriggerEventFcn
1SpeciesA >= 4SpeciesC = 10
2time >= 15SpeciesB = SpeciesC

Событие 1 и Событие 2 могут или не могут произойти одновременно.

  • Если Событие 1 и Событие 2 не происходят одновременно, когда Событие 2 инициировано, SpeciesB присвоен значение, которое SpeciesC имеет во время триггера события.

  • Если Событие 1 и Событие 2 происходят одновременно, решатель выполняет Событие 1 сначала, то выполняет Событие 2. В этом примере, если SpeciesC = 15, когда события инициированы после событий, выполняется, SpeciesC = 10 и SpeciesB = 10.

Оценка нескольких функций события

Рассмотрите функцию события, в которой вы указываете, что значение компонента модели (SpeciesB) зависит от значения компонента модели (SpeciesA), но SpeciesA также изменяется функцией события.

TriggerEventFcn
time >= 4{'SpeciesA = 10, SpeciesB = SpeciesA'}

Решатель хранит значение SpeciesA в возрастающем ребре и прежде чем любые функции события будут выполнены, и использует эту хранимую сумму, чтобы присвоить SpeciesB ее значение. Таким образом в этом примере, если SpeciesA = 15 в то время, когда событие инициировано, после того, как событие выполняется, SpeciesA = 10 и SpeciesB = 15.

Когда одно событие инициировало другое событие

В следующем примере Событие 1 включает выражение, в конечном счете функционируют, который заставляет Событие 2 быть инициированным (принимающий, что SpeciesA имеет сумму меньше, чем 5, когда Событие 1 выполняется).

Номер событияTriggerEventFcn
1time >= 5{'SpeciesA = 10, SpeciesB = 5'}
2SpeciesA >= 5SpeciesC = SpeciesB

Когда Событие 1 инициировано, решатель оценивает и выполняет Событие 1 так что в итоге SpeciesA = 10 и SpeciesB = 5. Теперь, триггер для События 2 становится верным, и решатель выполняет функцию события для События 2. Таким образом, SpeciesC = 5 в конце этого выполнения события.

У вас могут таким образом быть каскады события произвольной длины, например, Событие 1 инициировало Событие 2, которое в свою очередь инициировало Событие 3 и так далее.

Циклические События

В некоторых ситуациях серия событий может инициировать каскад, который становится цикличным. Если вы инициировали циклический набор событий, единственный способ остановить симуляцию путем нажатия Ctrl+C. Вы теряете любые данные, полученные в текущей симуляции. Вот пример циклических событий. Этот пример принимает что Species B <= 4 в начале цикла.

Номер событияTriggerEventFcn
1SpeciesA > 10{'SpeciesB = 5', 'SpeciesC = 1'}
2SpeciesB > 4{'SpeciesC = 10', 'SpeciesA = 1'}
3SpeciesC > 9{'SpeciesA = 15', 'SpeciesB = 1'}

Используя События, чтобы обратиться к разрывам в выражениях правила и скорости реакции

Решатели, которым предоставляют SimBiology, дают неточные результаты, когда следующие выражения не непрерывны и дифференцируемы:

  • Повторное правило присвоения

  • Алгебраическое правило

  • Правило скорости

  • Скорость реакции

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

Похожие темы