Правила являются математическими выражениями, которые позволяют вам задавать или изменять величины модели, а именно емкость отсека, количество видов или значение параметров.
Правила могут принимать форму начальных назначений, назначений в ходе симуляции (повторных назначений), алгебраических отношений или дифференциальных уравнений (правил скорости). Далее описываются подробные сведения о каждом типе правила.
Начальное правило назначения позволяет вам задать начальное значение величины модели как числовое значение или как функцию от других величин модели. Он оценивается один раз в начале симуляции.
Начальное правило назначения выражается как Variable = Expression
, и правило задается как Expression
. Например, можно написать начальное правило присвоения, чтобы задать начальное количество species2
быть пропорциональным species1
как species2 = k * species1
где k
является постоянным параметром.
Повторное правило назначения позволяет вам задавать значение величины как числовое значение или как функцию от других величин неоднократно во время симуляции. Он оценивается в каждый временной шаг, который определяется решателем в процессе симуляции.
Повторное правило назначения выражается как Variable = Expression
, и правило задается как Expression
. Например, чтобы неоднократно оценить общее количество видов путем суммирования видов в разных отсеках, можно было войти: xTotal = c1.X + c2.X
, где xTotal
является неконстантным параметром, c1
и c2
- имя отсеков, в которых обитают виды x.
Алгебраическое правило позволяет вам задать математические ограничения на одну или несколько величин модели, которые должны удерживаться во время симуляции. Он оценивается постоянно во время симуляции.
Алгебраическое правило принимает форму 0 = Expression
, и правило задается как Expression
. Для примера, если у вас есть уравнение сохранения массы, такое как species_total = species1 + species2
, запишите соответствующее алгебраическое правило как species1 + species2 - species_total
.
Однако повторные правила назначения математически эквивалентны алгебраическим правилам, но приводят к точным решениям вместо аппроксимированных решений. Поэтому рекомендуется, чтобы вы использовали повторные правила назначения вместо алгебраических правил, когда это возможно. Используйте алгебраические правила только тогда, когда:
Вы не можете аналитически решить уравнения, чтобы получить решение закрытой формы. Для примера нет решения закрытой формы для x^4 + ax^3 + bx^2 + cx + k = 0
в то время как решение закрытой формы для kx – c = 0
является x = c/k
.
У вас есть несколько уравнений с несколькими неизвестными, и их может быть неудобно решить.
Если вы используете алгебраическое правило, правило скорости или повторное назначение, чтобы изменить значение параметра или отделения во время симуляции, убедитесь, что ConstantValue
свойство параметра или ConstantCapacity
отсека устанавливается в false
.
Повторные правила назначения математически эквивалентны алгебраическим правилам, но приводят к точным решениям. Однако алгебраические правила решаются численно, и точность зависит от допусков ошибок, заданных в настройках симуляции. В сложение существует несколько преимуществ для повторных правил назначения, таких как лучшая вычислительная эффективность, более точные результаты, поскольку никакие правила не должны решаться численно (следовательно, никаких приближений) и поддержка анализа чувствительности.
Совет
Если вы можете аналитически решить для переменной, используйте повторное правило присвоения вместо алгебраического правила.
В повторных правилах назначения ограниченная переменная явно определяется как левая сторона, тогда как в алгебраических правилах она выводится из степеней свободы в системе уравнений. Смотрите также факторы при наложении ограничений.
Правило скорости представляет дифференциальное уравнение и позволяет вам задать производную по времени от величины модели. Он оценивается постоянно во время симуляции.
Правило скорости представлено как , что выражается в SimBiology как Variable = Expression
. Для примера, если у вас есть дифференциальное уравнение для видовых x, , напишите правило скорости как: x = k * (y + z)
.
Для получения дополнительных примеров смотрите Примеры Правила Скорости.
В начале симуляции (то есть во времени симуляции = 0) SimBiology® оценивает начальное назначение и повторные правила назначения как набор одновременных ограничений. SimBiology рассматривает правила как единую систему ограничений и автоматически переупорядочивает и оценивает их. Порядок, в котором правила появляются в модели, не влияет на результаты симуляции.
Если количество изменяется правилом назначения, правило заменяет начальные свойства значения, такие как InitialAmount
, Capacity
, или Value
. Аналогично, вариант, изменяющий такие величины, не имеет никакого эффекта, поскольку значение заменяется правилами присвоения.
SimBiology выдает ошибку, если модель имеет круговые зависимости в начальном назначении и повторных правилах назначения. Другими словами, начальные назначения и повторные назначения не могут иметь переменную, которая явно или неявно упоминается как с левой, так и с правой стороны уравнения.
Например, вы не можете создать округлые наборы назначений, такие как a = b + 1
и b = a + 1
, где a и b явно указаны на обе стороны уравнения. Пример неявной ссылки, когда правило назначения ссылается на вид в концентрации. В этом случае отсек, который содержит вид, неявно упоминается.
Предупреждение
Можно наблюдать различные результаты симуляции относительно начальных назначений для предыдущих релизов SimBiology (R2017a или более ранние). Чтобы восстановить те же результаты симуляции во времени = 0, как в R2017a или ранее, используйте updateInitialAssignments
функцию в командной строке. Если вы используете приложение SimBiology, щелкните правой кнопкой мыши модель из Project Workspace и выберите Remove Order Dependencies.
Во время симуляции (то есть во время симуляции > 0) SimBiology сохраняет количества видов, а не концентрации, если есть какие-либо изменения объема отсека, где обитают виды. Другими словами, если у вас есть повторное правило назначения или событие, которое изменяет объем, то вы видите эффект сохранения количества видов во время > 0.
Однако в начале симуляции (то есть во времени симуляции = 0) концепция сохранения суммы не применяется, потому что нет изменений до времени = 0. Существует только один набор начальных условий, и SimBiology использует условия в начале симуляции. В частности, в момент времени = 0 SimBiology:
Инициализирует переменные для видов, отсеков и параметров с помощью соответствующей InitialAmount
, Capacity
, и Value
свойства.
Обновляет значения путем замены их соответствующими альтернативными значениями из вариантов, если таковые имеются.
Обновляет значения путем вычисления начального назначения и повторных правил назначения как набора одновременных ограничений. Поэтому правила присвоения заменяют начальные значения, если величины модели изменяются такими правилами или вариантами.
Предупреждение
В предыдущих релизах (R2017a или более ранних), если повторное назначение меняло объем отсека, SimBiology использовала емкость отсека, чтобы определить начальное количество и сохранила его, когда объем отсека изменялся в момент = 0. В R2017b или более поздней версии SimBiology использует InitialAmount
свойство вида как начальное условие во время = 0. Рассмотрим следующую модель.
m = sbiomodel('m1') v = addcompartment(m,'v',10,'ConstantCapacity',0,'CapacityUnit','liter') p = addparameter(m,'p','ValueUnit','liter') r = addrule(m,'v = 100 * p','repeatedAssignment') s = addspecies(v,'s',50,'InitialAmountUnit','milligram/liter')
50 milligram/liter * 10 liter = 500 milligram
, а затем применил повторное правило назначения v = 100 liter
. Так, концентрацию s затем вычисляли и сообщали как 500 milligram/100 liter = 5 milligram/liter
в момент времени = 0. В R2017b или более поздней версии SimBiology использует InitialAmount
свойство видовых s, и сообщает начальное количество s как 50 milligram/liter
вместо этого.
Использование MATLAB® синтаксис для записи математического выражения для правила. Обратите внимание, что точка с запятой или точка с запятыми не требуется в конце выражения правила. Если ваше алгебраическое, повторное назначение или выражение правила скорости не непрерывно или дифференцируемо, см. Использование событий для устранения разрывов в выражениях правила и скорости реакции перед симуляцией модели.
Предположим, что у вас есть вид y
величина которого определяется уравнением y = m * x - c
. В SimBiology алгебраическое правило для описания этого ограничения записывается как m * x - c - y
. Если вы хотите использовать это правило для определения значения y
, затем m
, x
, и c
должны быть переменными или константами, значения которых известны или определяются другими уравнениями. Поэтому необходимо убедиться, что система уравнений не является чрезмерно напряженной или недостаточно напряженной. Например, если у вас больше уравнений, чем неизвестных, то система перегружена. И наоборот, если у вас больше неизвестных, чем уравнений, то система недостаточно напряжена.
Совет
Поведение недостаточно напряженной системы может быть исправлено путем добавления дополнительных правил или путем установки ConstantValue
или ConstantCapacity
или ConstantAmount
свойство некоторых компонентов в модели.
В следующих примерах показано, как создать правила скорости для различных приложений.
Этот пример показывает, как увеличить количество или концентрацию вида на постоянное значение с помощью правила скорости нулевого порядка. Например, предположим, что виды x
увеличивается на постоянную скорость k
. Скорость изменения:
Установите начальное количество видов x
в 2 и значение параметра k
по 1. Используйте следующие команды, чтобы настроить модель SimBiology соответственно и симулировать ее.
m = sbiomodel('m'); c = addcompartment(m,'comp'); s = addspecies(m,'x','InitialAmount',2); p = addparameter(m,'k','Value',1); r = addrule(m,'x = k','RuleType','rate'); [t,sd,species] = sbiosimulate(m); plot(t,sd); legend(species) xlabel('Time'); ylabel('Species Amount');
Также можно смоделировать постоянное увеличение вида с помощью реакции Mass Action null
- > x
с константой скорости k
.
clear m = sbiomodel('m'); c = addcompartment(m,'comp'); s = addspecies(m,'x','InitialAmount',2); r = addreaction(m,'null -> x'); kl = addkineticlaw(r,'MassAction'); p = addparameter(kl,'k','Value',1); kl.ParameterVariableNames = 'k'; [t,sd,species] = sbiosimulate(m); plot(t,sd); legend(species) xlabel('Time'); ylabel('Species Amount');
Этот пример показывает, как изменить количество вида, подобного реакции первого порядка, используя правило скорости первого порядка. Например, предположим, что вид x
затухает экспоненциально. Скорость изменения видов x
является:
Аналитическое решение:
где количество видов в момент t, и - начальная сумма. Используйте следующие команды, чтобы настроить модель SimBiology соответственно и симулировать ее.
m = sbiomodel('m'); c = addcompartment(m,'comp'); s = addspecies(m,'x','InitialAmount',2); p = addparameter(m,'k','Value',1); r = addrule(m,'x = -k * x','RuleType','rate'); [t,sd,species] = sbiosimulate(m); plot(t,sd); legend(species); xlabel('Time'); ylabel('Species Amount');
Если количество вида x
определяется правилом скорости и x
также находится в реакции, x
должен иметь свою BoundaryCondition
значение свойства установлено в true
. Например, с реакцией a -> x
и правило скорости , установите BoundaryCondition
свойство видовых x
на true
так, что термин дифференциальной скорости не создается из реакции. Количество x
определяется исключительно термином дифференциальной скорости от правила скорости. Если на BoundaryCondition
для свойства задано значение false
, вы получите следующее сообщение об ошибке, такое как Invalid rule variable 'x' in rate rule or reaction
.
Многие математические модели в литературе описаны дифференциальными уравнениями скорости для вида. Вы можете вручную преобразовать уравнения в реакции, или можно ввести уравнения как правила скорости. Например, можно ввести следующее дифференциальное уравнение скорости для вида C
:
как правило скорости в SimBiology: C = vi - (vd*X*C)/(Kc + C) - kd*C
Этот пример показывает, как создать правило скорости, где разновидность из одной реакции может определить скорость другой реакции, если она находится во втором уравнении скорости реакции. Точно так же вид из реакции может определить скорость другого вида, если он находится в правиле скорости, который определяет этот другой вид. Предположим, что у вас есть модель SimBiology с тремя видами (a
, b
, и c
), одна реакция (a -> b
), и два параметра (k1
и k2
). Уравнение скорости задано как , и правило скорости является . Решением для вида в реакции являются:
, .
Поскольку правило скорости зависит от реакции, . Решение является:
Введите следующие команды, чтобы настроить модель SimBiology соответственно и симулировать ее.
m = sbiomodel('m'); c = addcompartment(m,'comp'); s1 = addspecies(m,'a','InitialAmount',10,'InitialAmountUnits','mole'); s2 = addspecies(m,'b','InitialAmount',0,'InitialAmountUnits','mole'); s3 = addspecies(m,'c','InitialAmount',5,'InitialAmountUnits','mole'); rxn = addreaction(m,'a -> b'); kl = addkineticlaw(rxn,'MassAction'); p1 = addparameter(kl,'k1','Value',1,'ValueUnits','1/second'); rule = addrule(m,'c = k2 * a','RuleType','rate'); kl.ParameterVariableNames = 'k1'; p2 = addparameter(m,'k2','Value',1,'ValueUnits','1/second'); [t,sd,species] = sbiosimulate(m); plot(t,sd); legend(species); xlabel('Time'); ylabel('Species Amount');