Symbolic
In [1]:
Copied!
import sympy
from mxlpy import Model, fns, symbolic, to_symbolic_model
def sir() -> Model:
return (
Model()
.add_variables({"s": 0.9, "i": 0.1, "r": 0.0})
.add_parameters({"beta": 0.2, "gamma": 0.1})
.add_reaction(
"infection",
fns.mass_action_2s,
args=["s", "i", "beta"],
stoichiometry={"s": -1, "i": 1},
)
.add_reaction(
"recovery",
fns.mass_action_1s,
args=["i", "gamma"],
stoichiometry={"i": -1, "r": 1},
)
)
symbolic_model = to_symbolic_model(sir())
symbolic_model.jacobian()
import sympy
from mxlpy import Model, fns, symbolic, to_symbolic_model
def sir() -> Model:
return (
Model()
.add_variables({"s": 0.9, "i": 0.1, "r": 0.0})
.add_parameters({"beta": 0.2, "gamma": 0.1})
.add_reaction(
"infection",
fns.mass_action_2s,
args=["s", "i", "beta"],
stoichiometry={"s": -1, "i": 1},
)
.add_reaction(
"recovery",
fns.mass_action_1s,
args=["i", "gamma"],
stoichiometry={"i": -1, "r": 1},
)
)
symbolic_model = to_symbolic_model(sir())
symbolic_model.jacobian()
Out[1]:
$\displaystyle \left[\begin{matrix}- 1.0 \beta i & - 1.0 \beta s & 0\\1.0 \beta i & 1.0 \beta s - 1.0 \gamma & 0\\0 & 1.0 \gamma & 0\end{matrix}\right]$
Identifiability¶
In [2]:
Copied!
res = symbolic.check_identifiability(
symbolic_model,
outputs=[sympy.Symbol("i"), sympy.Symbol("r")],
)
print(res.summary())
res = symbolic.check_identifiability(
symbolic_model,
outputs=[sympy.Symbol("i"), sympy.Symbol("r")],
)
print(res.summary())
Main loop: 0it [00:00, ?it/s]
Main loop: 2it [00:00, 32.10it/s]
Summary ======= The model is not FISPO. Identifiable parameters: [beta, gamma] Unidentifiable parameters: [] Identifiable variables: [s, i, r] Unidentifiable variables: [] Identifiable inputs: [] Unidentifiable inputs: []