Rules are mathematical expressions that allow you to define or modify model quantities, namely compartment capacity, species amount, or parameter value.
Rules can take the form of initial assignments, assignments during the course of a simulation (repeated assignments), algebraic relationships, or differential equations (rate rules). Details of each type of rule are described next.
An initial assignment rule lets you specify the initial value of a model quantity as a numeric value or as a function of other model quantities. It is evaluated once at the beginning of a simulation.
An initial assignment rule is expressed as Variable
= Expression
, and the rule is specified as the Expression
.
For example, you could write an initial assignment rule to set the
initial amount of species2
to be proportional to species1
as species2
= k * species1
where k
is a constant
parameter.
Initial assignments are evaluated in the order in which they occur in the model. Note that their effects can change when you reorder them.
A repeated assignment rule lets you specify the value of a quantity as a numeric value or as a function of other quantities repeatedly during the simulation. It is evaluated at every time step, which are determined by the solver during the simulation process.
A repeated assignment rule is expressed as Variable
= Expression
, and the rule is specified as the Expression
.
For example, to repeatedly assign the value of 50
to
species x
throughout the simulation, define the
repeated assignment rule as x = 100
.
Repeated assignments are reordered automatically and evaluated
as a set of simultaneous constraints. Thus it is not possible to create
circular sets of assignments such as a = b + 1
and b
= a + 1
.
An algebraic rule lets you specify mathematical constraints on one or more model quantities that must hold during a simulation. It is evaluated continuously during a simulation.
An algebraic rule takes the form 0 = Expression
,
and the rule is specified as the Expression
. For
example, if you have a mass conservation equation such as species_total
= species1 + species2
, write the corresponding algebraic
rule as species1 + species2  species_total
.
However, repeated assignment rules are mathematically equivalent to algebraic rules, but result in exact solutions instead of approximated solutions. Therefore, it is recommended that you use repeated assignment rules instead of algebraic rules whenever possible. Use algebraic rules only when:
You cannot analytically solve the equations to get
a closedform solution. For example, there is no closedform solution
for x^4 + ax^3 + bx^2 + cx + k = 0
whereas the
closedform solution for kx – c = 0
is x
= c/k
.
You have multiple equations with multiple unknowns, and they could be inconvenient to solve.
Tip
If you use an algebraic or rate rule to vary the value of a
parameter or compartment during the simulation, make sure the 
Repeated assignment rules are mathematically equivalent to algebraic rules, but result in exact solutions. However, algebraic rules are solved numerically, and the accuracy depends on the error tolerances specified in the simulation settings. In addition, there are several advantages to repeated assignment rules such as better computational performance, more accurate results since no rules have to be solved numerically (hence no approximations), and sensitivity analysis support.
Tip

A rate rule represents a differential equation and lets you specify the time derivative of a model quantity. It is evaluated continuously during a simulation.
A rate rule is represented as $$\frac{dVariable}{dt}=Expression$$,
which is expressed in SimBiology as Variable = Expression
.
For example, if you have a differential equation for species x, $$\frac{dx}{dt}=k(y+z)$$, write the rate rule as: x
= k * (y + z)
.
For examples of rate rules, see Create Rate Rules.
Use MATLAB^{®} syntax to write a mathematical expression for a rule. Note that no semicolon or comma is needed at the end of a rule expression. If your algebraic, repeated assignment, or rate rule expression is not continuous or differentiable, see Using Events to Address Discontinuities in Rule and Reaction Rate Expressions before simulating your model.
Suppose you have a species y
whose amount
is determined by the equation y = m * x  c
. In
SimBiology, the algebraic rule to describe this constraint is written
as m * x  c  y
. If you want to use this rule
to determine the value of y
, then m
, x
,
and c
must be variables or constants whose values
are known or determined by other equations. Therefore, you must ensure
that the system of equations is not overconstrained or underconstrained.
For instance, if you have more equations than unknowns, then the system
is overconstrained. Conversely, if you have more unknowns than the
equations, then the system is underconstrained.
Tip
The behavior of an underconstrained system could be fixed by
adding additional rules or by setting the 
During a simulation (i.e., at simulation time > 0), if there are any changes to the volume of a compartment where the species reside, SimBiology^{®} conserves species amounts rather than concentrations.
At the beginning of a simulation (i.e., at time = 0), SimBiology evaluates the initial assignment rules one after another based on the order they appear in the model rather than as a set of mathematical constraints to be analyzed together. More specifically, at time = 0, SimBiology:
Initializes variables for species, compartments, and
parameters using the InitialAmount
, Capacity
,
and Value
properties.
Updates the variables by evaluating initial assignment rules in the order they appear, thus not conserving species amounts if the compartment's volume changes.
Updates the variables by evaluating repeated assignment rules as a set of constraints that conserve species amounts when the compartment's volume changes.
At time > 0, SimBiology:
Updates the variables by evaluating repeated assignment rules as a set of constraints that conserve species amounts when the compartment's volume changes.
SimBiology defines a compartment's volume before evaluating repeated assignments, and if you have a repeated assignment rule or an event that changes the volume and depends on time (either explicitly or implicitly), then you will see the effect of conservation of species amount(s) at time > 0.
Consider the following example that illustrates such conservation
of amounts. Suppose there is a onecompartment model with a drug that
degrades according to the mass action kinetics with the forward reaction
rate k
. In order to distinguish the amount and
concentration units, the drug is represented in two different species:
one in an amount unit (milligram) and another one in a concentration
unit (milligram/liter).
Compartment, Species, and Parameter  Initial Values 

cell (compartment)  1.0 liter 
Amount_A (drug A in amount units)  0.0 milligram 
Concentration_A (drug A in concentration
units)  100.0 milligram/liter 
k (forward rate parameter)  0.1 hour^{1} 
Here is an initial assignment, repeated assignment, and event as they appear in the model.
Rules and Event  Formula 

Initial assignment  cell = 2.0 
Repeated assignment  Amount_A = Concentration_A * cell 
Event  Trigger: time >= 5 ; EventFcns: cell
= 4.0 
The initial compartment volume is doubled at time = 0 by the initial assignment, and doubled again at time >= 5 by the event.
The model is simulated, and the final results are shown in the following States versus Time figure.
At time = 0, the volume of the cell is doubled to 2.0 liters
via the initial assignment, and consequently the amount of drug A
becomes 200 milligram as defined by the repeated assignment. But the
concentration does not change and is still 100 milligram/liter. This
illustrates that the amount is not conserved at time = 0. However,
at time >= 5, the volume of the cell
becomes
5.0 liter and causes a drop in the concentration (milligram/liter)
to conserve the amount (milligram) of drug A. Thus this example illustrates
that at time > 0 the amount (instead of the concentration) of drug
A is conserved at all times, but not at time = 0.