In [1]:
Copied!
import numpy as np
from example_models import get_phase_plane
from modelbase2 import plot
from modelbase2.simulator import Simulator
from modelbase2.types import unwrap
import numpy as np
from example_models import get_phase_plane
from modelbase2 import plot
from modelbase2.simulator import Simulator
from modelbase2.types import unwrap
Stability analysis¶
modelbase2 offers routines to easily visualise the stability of the model over a wide range of parameters.
plot.trajectories2d
shows the vector field depending on the values of two variables
as a quiver plot.
In [2]:
Copied!
_ = plot.trajectories_2d(
get_phase_plane(),
x1=("s1", np.linspace(0, 2, 20)),
x2=("s2", np.linspace(0, 2, 20)),
)
_ = plot.trajectories_2d(
get_phase_plane(),
x1=("s1", np.linspace(0, 2, 20)),
x2=("s2", np.linspace(0, 2, 20)),
)
As always, plot.trajectories_2d
returns matplotlib Figure
and Axes
objects, so you can further customise the plot.
Below we visualise example trajectories for different initial conditions of the model.
In [3]:
Copied!
fig, ax = plot.trajectories_2d(
get_phase_plane(),
x1=("s1", np.linspace(0, 2, 20)),
x2=("s2", np.linspace(0, 2, 20)),
)
for s1 in np.linspace(0, 1, 4):
for s2 in np.linspace(0, 2, 4):
c = unwrap(
Simulator(get_phase_plane(), y0={"s1": s1, "s2": s2})
.simulate(1.5)
.get_result()
).variables
ax.plot(c["s1"], c["s2"])
fig, ax = plot.trajectories_2d(
get_phase_plane(),
x1=("s1", np.linspace(0, 2, 20)),
x2=("s2", np.linspace(0, 2, 20)),
)
for s1 in np.linspace(0, 1, 4):
for s2 in np.linspace(0, 2, 4):
c = unwrap(
Simulator(get_phase_plane(), y0={"s1": s1, "s2": s2})
.simulate(1.5)
.get_result()
).variables
ax.plot(c["s1"], c["s2"])