Hamiltonian
Index
In the examples in the documentation below, the methods are not prefixed by the module name even if they are private.
julia> using CTFlows
julia> x = 1
julia> private_fun(x) # throw an errormust be replaced by
julia> using CTFlows
julia> x = 1
julia> CTFlows.private_fun(x)However, if the method is reexported by another package, then, there is no need of prefixing.
julia> module OptimalControl
import CTFlows: private_fun
export private_fun
end
julia> using OptimalControl
julia> x = 1
julia> private_fun(x)Documentation
CTFlows.Flow — Method
Flow(
h::CTFlows.AbstractHamiltonian;
alg,
abstol,
reltol,
saveat,
internalnorm,
kwargs_Flow...
) -> CTFlowsODE.HamiltonianFlow
Constructs a Hamiltonian flow from a scalar Hamiltonian.
This method builds a numerical integrator that simulates the evolution of a Hamiltonian system given a Hamiltonian function h(t, x, p, l) or h(x, p).
Internally, it computes the right-hand side of Hamilton’s equations via automatic differentiation and returns a HamiltonianFlow object.
Keyword Arguments
alg,abstol,reltol,saveat,internalnorm: solver options.kwargs_Flow...: forwarded to the solver.
Example
julia> H(x, p) = dot(p, p) + dot(x, x)
julia> flow = CTFlows.Flow(CTFlows.Hamiltonian(H))
julia> xf, pf = flow(0.0, x0, p0, 1.0)CTFlows.Flow — Method
Flow(
hv::CTFlows.HamiltonianVectorField;
alg,
abstol,
reltol,
saveat,
internalnorm,
kwargs_Flow...
) -> CTFlowsODE.HamiltonianFlow
Constructs a Hamiltonian flow from a precomputed Hamiltonian vector field.
This method assumes you already provide the Hamiltonian vector field (dx/dt, dp/dt) instead of deriving it from a scalar Hamiltonian.
Returns a HamiltonianFlow object that integrates the given system.
Keyword Arguments
alg,abstol,reltol,saveat,internalnorm: solver options.kwargs_Flow...: forwarded to the solver.
Example
julia> hv(t, x, p, l) = (∇ₚH, -∇ₓH)
julia> flow = CTFlows.Flow(CTFlows.HamiltonianVectorField(hv))
julia> xf, pf = flow(0.0, x0, p0, 1.0, l)CTFlowsODE.hamiltonian_usage — Method
hamiltonian_usage(
alg,
abstol,
reltol,
saveat,
internalnorm;
kwargs_Flow...
) -> Any
Constructs a solver function for Hamiltonian systems, with configurable solver options.
Returns a callable object that integrates Hamilton's equations from an initial state (x0, p0) over a time span tspan = (t0, tf), with optional external parameters.
The returned function has two methods:
f(tspan, x0, p0, v=default_variable; kwargs...)→ returns the full trajectory (solution object).f(t0, x0, p0, tf, v=default_variable; kwargs...)→ returns only the final(x, p)state.
Internally, it uses OrdinaryDiffEq.solve and supports events and callbacks.
Arguments
alg: integration algorithm (e.g.Tsit5()).abstol,reltol: absolute and relative tolerances.saveat: time points for saving.internalnorm: norm used for adaptive integration.kwargs_Flow...: additional keyword arguments for the solver.
Example
julia> flowfun = hamiltonian_usage(Tsit5(), 1e-8, 1e-8, 0.1, norm)
julia> xf, pf = flowfun(0.0, x0, p0, 1.0)CTFlowsODE.rhs — Method
rhs(
h::CTFlows.AbstractHamiltonian
) -> CTFlowsODE.var"#rhs!#rhs##0"{<:CTFlows.AbstractHamiltonian{TD, VD}} where {TD<:CTFlows.TimeDependence, VD<:CTFlows.VariableDependence}
Constructs the right-hand side of Hamilton's equations from a scalar Hamiltonian function.
Given a Hamiltonian h(t, x, p, l) (or h(x, p) in the autonomous case), returns an in-place function rhs!(dz, z, v, t) suitable for numerical integration.
This function computes the canonical Hamiltonian vector field using automatic differentiation:
dz[1:n] = ∂H/∂p
dz[n+1:2n] = -∂H/∂xArguments
h: a subtype ofCTFlows.AbstractHamiltoniandefining the scalar Hamiltonian.
Returns
rhs!: a function for use in an ODE solver.
CTFlowsODE.rhs_augmented — Method
rhs_augmented(
h::CTFlows.AbstractHamiltonian,
n::Int64,
m::Int64
) -> CTFlowsODE.var"#rhs_aug!#rhs_augmented##0"{<:CTFlows.AbstractHamiltonian{TD, VD}, Int64, Int64} where {TD<:CTFlows.TimeDependence, VD<:CTFlows.VariableDependence}
Constructs the right-hand side of the augmented Hamiltonian system.
Given a Hamiltonian h(t, x, p, v), returns an in-place function rhs_aug!(dz_aug, z_aug, _, t) for the augmented system where z_aug = [x; v; p; pv] with:
dx/dt = ∂H/∂pdv/dt = 0(v is constant)dp/dt = -∂H/∂xdpv/dt = -∂H/∂v
This is used when augment=true to compute the costate pv associated with the variable v.
Arguments
h: aCTFlows.Hamiltoniandefining the scalar Hamiltonian.n::Int: state dimension.m::Int: variable dimension.
Returns
rhs_aug!: a function for use in an ODE solver for the augmented system.
Notes
The initial condition for pv is assumed to be zero: pv(t0) = 0. The returned pvf = pv(tf) satisfies: pvf = -∫_{t0}^{tf} ∂H/∂v dt.