Правила - это математические выражения, позволяющие определять или изменять величины модели, а именно вместимость отсека, количество видов или значение параметра.
Правила могут принимать форму начальных назначений, назначений во время моделирования (повторных назначений), алгебраических отношений или дифференциальных уравнений (правил скорости). Подробности каждого типа правила описаны ниже.
Правило начального назначения позволяет указать начальное значение величины модели как числовое значение или как функцию других величин модели. Он оценивается один раз в начале моделирования.
Начальное правило назначения выражается как Variable = Expression, и правило указано как Expression. Например, можно написать правило начального назначения, чтобы установить начальное количество species2 быть пропорциональным species1 как species2 = k * species1 где k является постоянным параметром.
Правило повторного назначения позволяет указать значение величины как числовое значение или как функцию других величин многократно во время моделирования. Он оценивается на каждом шаге времени, который определяется решателем в процессе моделирования.
Повторяющееся правило назначения выражается как Variable = Expression, и правило указано как Expression. Например, для многократной оценки общего количества видов путём суммирования видов в разных отсеках можно ввести: xTotal = c1.X + c2.X, где xTotal является непостоянным параметром, c1 и c2 являются названием отсеков, где обитает вид х.
Алгебраическое правило позволяет задать математические ограничения для одной или нескольких величин модели, которые должны удерживаться во время моделирования. Его непрерывно оценивают во время моделирования.
Алгебраическое правило принимает вид 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.
Повторяющиеся правила назначения математически эквивалентны алгебраическим правилам, но приводят к точным решениям. Однако алгебраические правила решаются численно, и точность зависит от допусков ошибок, заданных в настройках моделирования. Кроме того, существует несколько преимуществ повторных правил назначения, таких как лучшая вычислительная производительность, более точные результаты, так как никакие правила не должны решаться численно (следовательно, нет аппроксимаций) и поддержка анализа чувствительности.
Совет
Если для переменной можно выполнить аналитическое решение, используйте правило повторного назначения вместо алгебраического правила.
В повторяющихся правилах назначения ограниченная переменная явно определяется как левая сторона, тогда как в алгебраических правилах она выводится из степеней свободы в системе уравнений. См. также Соображения при наложении ограничений.
Правило скорости представляет дифференциальное уравнение и позволяет задать производную по времени от величины модели. Его непрерывно оценивают во время моделирования.
Правило скорости представлено как Expression, которое выражается в SimBiology какVariable = Expression. Например, если имеется дифференциальное уравнение для видов x, + z), запишите правило скорости как: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 щелкните модель правой кнопкой мыши в рабочей области проекта и выберите Удалить зависимости порядка.
Во время моделирования (то есть во время моделирования > 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. Скорость изменения составляет:
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 является:
* x
Аналитическим решением является:
e-kt
где - количество видов в момент времени 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 и правило скорости * 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). Уравнение скорости определяется как * a, а правило скорости = k2 * a. Раствор для соединений в реакции представляет собой:
aoe-k1t1-e-k1t ).
Поскольку правило скорости * a зависит от aoe-k1t). Решение заключается в следующем:
1-e-k1t)
Введите следующие команды для соответствующей настройки модели 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');
