Правила являются математическими выражениями, которые позволяют вам задавать или изменять количества модели, а именно, способность отсека, сумма разновидностей или значение параметров.
Правила могут принять форму начальных присвоений, присвоений в ходе симуляции (повторенные присвоения), алгебраические отношения или дифференциальные уравнения (правила скоростей). Детали каждого типа правила описаны затем.
Первоначальное правило присвоения позволяет вам задать начальное значение количества модели как числовое значение или как функция других количеств модели. Это оценено однажды в начале симуляции.
Первоначальное правило присвоения описывается как 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
должны быть переменные или константы, значения которых известны или определяются другими уравнениями. Поэтому необходимо гарантировать, что система уравнений не сверхограничивается или underconstrained. Например, если у вас есть больше уравнений, чем неизвестные, затем система сверхограничивается. С другой стороны, если у вас есть больше неизвестных, чем уравнения, затем система является underconstrained.
Совет
Поведение underconstrained системы могло быть зафиксировано путем добавления дополнительных правил или путем установки 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');
В качестве альтернативы вы могли смоделировать постоянное увеличение разновидности с помощью реакции Массовой акции 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');