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 — MethodFlow(
    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 — MethodFlow(
    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 — Methodhamiltonian_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 — Methodrhs(
    h::CTFlows.AbstractHamiltonian
) -> CTFlowsODE.var"#rhs!#45"{<: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 of- CTFlows.AbstractHamiltoniandefining the scalar Hamiltonian.
Returns
- rhs!: a function for use in an ODE solver.