Library Reference
Types of Dynamical Systems
Machines
AlgebraicDynamics.DWDDynam.AbstractMachine — TypeMachine{T}
Machine{T,N}A directed open dynamical system operating on information of type T. For type arguments {T,N}, the system operates on arrays of type T and ndims = N. A machine m has type signature (m.ninputs, m.noutputs).
AlgebraicDynamics.DWDDynam.ContinuousMachine — TypeContinuousMachine{T}(ninputs, nstates, noutputs, f, r)A directed open continuous system. The dynamics function f defines an ODE $\dot u(t) = f(u(t),x(t),p,t)$, where $u$ is the state and $x$ captures the exogenous variables.
The readout function r may depend on the state, parameters and time, so it must be of the form $r(u,p,t)$. If it is left out, then $r=u$.
AlgebraicDynamics.DWDDynam.DelayMachine — TypeDelayMachine{T}(ninputs, nstates, noutputs, f, r)A delay open continuous system. The dynamics function f defines an ODE $\dot u(t) = f(u(t), x(t), h(p,t), p, t)$, where $u$ is the state, $x$ captures the exogenous variables, and $h$ is a history function.
The readout function r may depend on the state, history, parameters and time, so it has the signature $r(u,h,p,t)$. If it is left out, then $r=u$.
AlgebraicDynamics.DWDDynam.DiscreteMachine — TypeDiscreteMachine{T}(ninputs, nstates, noutputs, f, r)A directed open discrete dynamical system. The dynamics function f defines a discrete update rule $u_{n+1} = f(u_n, x_n, p, t)$, where $u_n$ is the state and $x_n$ is the value of the exogenous variables at the $n$th time step.
The readout function r may depend on the state, parameters and time step, so it must be of the form $r(u_n,p,n)$. If it is left out, then $r_n=u_n$.
Resource Sharers
AlgebraicDynamics.UWDDynam.AbstractResourceSharer — TypeResourceSharer{T}
ResourceSharer{T,N}An undirected open dynamical system operating on information of type T. For type arguments {T,N}, the system operates on arrays of type T and ndims = N. A resource sharer r has type signature r.nports.
AlgebraicDynamics.UWDDynam.ContinuousResourceSharer — TypeContinuousResourceSharer{T}(nports, nstates, f, portmap)An undirected open continuous system. The dynamics function f defines an ODE $\dot u(t) = f(u(t),p,t)$, where $u(t)$ has length nstates. nports is the number of exposed ports and portmap is a list of exposed states. For example, if portmap = [2,2,3] then there are three ports which expose the state variables 2, 2, and 3 respectively.
AlgebraicDynamics.UWDDynam.DelayResourceSharer — TypeDelayResourceSharer{T}(nports, nstates, f, portmap)An undirected open continuous system. The dynamics function f defines a DDE $\dot u(t) = f(u(t),h(t),p,t)$, where $h$ is a function giving the history of the system's state $u$ before the interval on which the solution will be computed begins (usually for $t < 0$). f should have signature $f(u,h,p,t)$, where $h$ is a function.
AlgebraicDynamics.UWDDynam.DiscreteResourceSharer — TypeDiscreteResourceSharer{T}(nports, nstates, f, portmap)An undirected open discrete system. The dynamics function f defines a discrete update rule $u_{n+1} = f(u_n, p, t)$.
Composition of Dynamical Systems
Operad Algebras
Catlab.WiringDiagrams.WiringDiagramAlgebras.oapply — Functionoapply(d::WiringDiagram, ms::Vector{M}) where {M<:AbstractMachine}Implements the operad algebras for directed composition of dynamical systems, given a composition pattern (implemented by a directed wiring diagram d) and primitive systems (implemented by a collection of machines ms). Returns the composite machine.
Each box of the composition pattern d must be filled by a machine with the appropriate type signature.
oapply(d::WiringDiagram, m::AbstractMachine)A version of oapply where each box of d is filled with the same machine m.
oapply(d::WiringDiagram, generators::AbstractDict{S,M}) where {S,M<:AbstractMachine}A version of oapply where generators is a dictionary mapping the name of each box to its corresponding machine.
oapply(d::OpenCPortGraph, ms::Vector{M}) where {M<:AbstractMachine}Implements the operad algebras for directed composition of dynamical systems, given a composition pattern (implemented by an open circular port graph d) and primitive systems (implemented by a collection of machines ms). Returns the composite machine.
Each box of the composition pattern d must be filled by a machine with the appropriate type signature.
oapply(d::OpenCPortGraph, m::AbstractMachine)A version of oapply where each box of d is filled with the same machine m.
oapply(d::AbstractUWD, rs::Vector{R}) where {R<:AbstractResourceSharer}Implements the operad algebras for undirected composition of dynamical systems, given a composition pattern (implemented by an undirected wiring diagram d) and primitive systems (implemented by a collection of resource sharers rs). Returns the composite resource sharer.
Each box of d must be filled by a resource sharer of the appropriate type signature.
oapply(d::AbstractUWD, r::AbstractResourceSharer)A version of oapply where each box of d is filled with the same resource sharer r.
oapply(d::AbstractUWD, generators::AbstractDict{S,R}) where {S,R<:AbstractResourceSharer}A version of oapply where generators is a dictionary mapping the name of each box to its corresponding resource sharer.
Checks
AlgebraicDynamics.UWDDynam.fills — Functionfills(m::AbstractMachine, d::OpenCPortGraph, b::Int)Checks if m is of the correct signature to fill box b of the open CPG d.
fills(r::AbstractResourceSharer, d::AbstractUWD, b::Int)Checks if r is of the correct signature to fill box b of the undirected wiring diagram d.
AlgebraicDynamics.DWDDynam.fills — Functionfills(m::AbstractMachine, d::WiringDiagram, b::Int)Checks if m is of the correct signature to fill box b of the wiring diagram d.
Time Evolution
Instantaneous Dynamics
AlgebraicDynamics.UWDDynam.eval_dynamics — Functioneval_dynamics(m::AbstractMachine, u::AbstractVector, x:AbstractVector{F}, p, t) where {F<:Function}
eval_dynamics(m::AbstractMachine{T}, u::AbstractVector, x:AbstractVector{T}, p, t) where TEvaluates the dynamics of the machine m at state u, parameters p and time t. The exogenous variables are set by x, which may be a collection either of functions $x_i(t)$ or of constant values. In either case, the length of x must equal the number of inputs to m.
eval_dynamics(r::AbstractResourceSharer, u::AbstractVector, p, t)Evaluates the dynamics of the resource sharer r at state u, parameters p and time t. Omitting p and t is allowed if the dynamics of r does not depend on them.
Time Discretization
AlgebraicDynamics.UWDDynam.euler_approx — Functioneuler_approx(m::ContinuousMachine, h::Float)Transforms a continuous machine m into a discrete machine via Euler's method with step size h. If the dynamics of m is given by $\dot{u}(t) = f(u(t),x(t),p,t)$, then the dynamics of the new discrete system is given by the update rule $u_{n+1} = u_n + h f(u_n, x_n, p, t)$.
euler_approx(m::ContinuousMachine)Transforms a continuous machine m into a discrete machine via Euler's method. The step size parameter is appended to the end of the system's parameter list.
euler_approx(ms::Vector{M}, args...) where {M<:ContinuousMachine}
euler_approx(ms::AbstractDict{S, M}, args...) where {S,M<:ContinuousMachine}Map euler_approx over a collection of machines with identical args.
euler_approx(r::ContinuousResourceSharer, h::Float)Transforms a continuous resource sharer r into a discrete resource sharer via Euler's method with step size h. If the dynamics of r is given by $\dot{u}(t) = f(u(t),p,t)$, then the dynamics of the new discrete system is given by the update rule $u_{n+1} = u_n + h f(u_n, p, t)$.
euler_approx(r::ContinuousResourceSharer)Transforms a continuous resource sharer r into a discrete resource sharer via Euler's method. The step size parameter is appended to the end of the system's parameter list.
euler_approx(rs::Vector{R}, args...) where {T,R<:ContinuousResourceSharer{T}}
euler_approx(rs::AbstractDict{S, R}, args...) where {S,T,R<:ContinuousResourceSharer{T}}Map euler_approx over a collection of resource sharers with identical args.
Discrete Trajectory
AlgebraicDynamics.UWDDynam.trajectory — Functiontrajectory(m::DiscreteMachine, u0::AbstractVector, x::AbstractVector, p, nsteps::Int; dt::Int = 1)
trajectory(m::DiscreteMachine, u0::AbstractVector, x::AbstractVector, p, tspan::Tuple{T,T}; dt::T= one(T)) where {T<:Real}Evolves the machine m, for nsteps times or over tspan, with step size dt, initial condition u0 and parameters p. Any inputs to m are determined by x as in eval_dynamics(). If m has no inputs, then you can omit x.
trajectory(r::DiscreteResourceSharer, u0::AbstractVector, p, nsteps::Int; dt::Int = 1)
trajectory(r::DiscreteResourceSharer, u0::AbstractVector, p, tspan::Tuple{T,T}; dt::T= one(T)) where {T<:Real}Evolves the resouce sharer r, for nsteps times or over tspan, with step size dt, initial condition u0 and parameters p.
Package Extensions
OrdinaryDiffEq.jl
SciMLBase.ODEProblem — TypeODEProblem(m::ContinuousMachine, x::Vector, u0::Vector, tspan, p=nothing; kwargs...)Constructs an ODEProblem from the vector field defined by (u,p,t) -> m.dynamics(u,x,p,t), where the exogenous variables are determined by x as in eval_dynamics().
ODEProblem(r::ContinuousResourceSharer, u0::Vector, tspan)Constructs an ODEProblem from the vector field defined by (u,p,t) -> r.dynamics(u,p,t).
SciMLBase.DiscreteProblem — TypeDiscreteProblem(m::DiscreteMachine, x::Vector, u0::Vector, tspan, p=nothing; kwargs...)Constructs a DiscreteProblem from the equation of motion defined by (u,p,t) -> m.dynamics(u,x,p,t), where the exogenous variables are determined by x as in eval_dynamics(). Pass nothing in place of p if your system does not have parameters.
DiscreteProblem(r::DiscreteResourceSharer, u0::Vector, p)Constructs a DiscreteProblem from the equation of motion defined by (u,p,t) -> r.dynamics(u,p,t). Pass nothing in place of p if your system does not have parameters.
DelayDiffEq.jl
SciMLBase.DDEProblem — TypeDDEProblem(m::DelayMachine, u0::Vector, x::Vector, h::Function, tspan, p=nothing; kwargs...)Constructs a DDEProblem from the vector field defined by (u,h,p,t) -> m.dynamics(u,x,h,p,t), where the exogenous variables are determined by x as in eval_dynamics().
DDEProblem(r::DelayResourceSharer, u0::Vector, h, tspan)Constructs a DDEProblem from the vector field defined by (u,h,p,t) -> r.dynamics(u,h,p,t).