Degenerate Lagrangian Systems
A Lagrangian $L(x,v)$ is said to be degenerate if the determinant of the Hessian with respect to the velocities vanishes, i.e.,
\[\left\vert \frac{\partial^2 L}{\partial v^i \, \partial v^j} \right\vert = 0 .\]
The Euler-Lagrange equations,
\[\frac{d}{dt} \frac{\partial L}{\partial v} - \frac{\partial L}{\partial x} = 0 ,\]
of such Lagrangians are a set of first-order ordinary differential equations and not second-order differential equations as for non-degenerate Lagrangians.
Of particular interest in various applications are degenerate Lagrangians of the form
\[L(x,v) = \vartheta(x) \cdot v - H (x) .\]
Their Euler-Lagrange equations take the form
\[\frac{d \vartheta}{dt} (x) = \nabla \vartheta(x) \cdot v - \nabla H (x) .\]
We exemplify this with the Lotka-Volterra problem in 2d.
Lotka-Volterra
Before any use, we need to load EulerLagrange:
using EulerLagrange
using LinearAlgebraNext, we generate symbolic variables for a two-dimensional Lagrangian system:
t, x, v = lagrangian_variables(2)(t, (x(t))[1:2], (v(t))[1:2])We define a named tuple with typical values for the parameters, e.g.,
params = (
a₁ = -1.0,
a₂ = -1.0,
b₁ = 1.0,
b₂ = 2.0,
)(a₁ = -1.0, a₂ = -1.0, b₁ = 1.0, b₂ = 2.0)We use the function symbolize to generate a symbolic version of the parameters:
sparams = symbolize(params)(a₁ = a₁ₚ, a₂ = a₂ₚ, b₁ = b₁ₚ, b₂ = b₂ₚ)Define the Hamiltonian function and the symplectic potential:
ϑ(x, params) = [log(x[2]) / x[1] / 2, - log(x[1]) / x[2] / 2]
H(x, params) = params.a₁ * x[1] + params.a₂ * x[2] + params.b₁ * log(x[1]) + params.b₂ * log(x[2])H (generic function with 1 method)The Hamiltonian and the symplectic potential, evaluated on and together with the symbolic variables and parameters are used to construct a DegenerateLagrangianSystem:
lag_sys = DegenerateLagrangianSystem(ϑ(x,sparams) ⋅ v, H(x,sparams), t, x, v, sparams)
Degenerate Lagrangian system with
L = (log((x(t))[2])*(v(t))[1]) / (2(x(t))[1]) + (-log((x(t))[1])*(v(t))[2]) / (2(x(t))[2]) - a₁ₚ*(x(t))[1] - a₂ₚ*(x(t))[2] - b₁ₚ*log((x(t))[1]) - b₂ₚ*log((x(t))[2])The constructor computes the Euler-Lagrange equations and generates the corresponding Julia code.
In the last step, we can now construct a LODEProblem from the LagrangianSystem and some appropriate initial conditions, a time span to integrate over and a time step:
tspan = (0.0, 10.0)
tstep = 0.01
q₀ = [2.0, 1.0]
p₀ = ϑ(q₀, params)
lprob = LODEProblem(lag_sys, tspan, tstep, q₀, p₀; parameters = params)Geometric Equation Problem for Lagrangian Ordinary Differential Equation (LODE)
with vector fields
ϑ = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xdaede812, 0x49637e5e, 0x29975e81, 0xe7fdcb13, 0xde62505f), Expr}(:(#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =# @inbounds begin
#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =#
begin
begin
var"##cse#1" = (log)((getindex)(X, 2))
var"##cse#2" = 2
var"##cse#3" = (*)(var"##cse#2", (getindex)(X, 1))
var"##cse#4" = (/)(var"##cse#1", var"##cse#3")
var"##cse#5" = -1
var"##cse#6" = (log)((getindex)(X, 1))
var"##cse#7" = (*)(var"##cse#5", var"##cse#6")
var"##cse#8" = (*)(var"##cse#2", (getindex)(X, 2))
var"##cse#9" = (/)(var"##cse#7", var"##cse#8")
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1298 =# @inbounds begin
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1294 =#
ˍ₋out[1] = var"##cse#4"
ˍ₋out[2] = var"##cse#9"
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1296 =#
ˍ₋out
end
end
end
end))
f = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x3bb80120, 0x94b5ca74, 0xbe3ca2a1, 0x564ec167, 0x5ab9c933), Expr}(:(#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =# @inbounds begin
#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =#
begin
begin
var"##cse#1" = -1
var"##cse#2" = (*)(var"##cse#1", params.a₁)
var"##cse#3" = (log)((getindex)(X, 2))
var"##cse#4" = (*)((*)(var"##cse#1", (getindex)(V, 1)), var"##cse#3")
var"##cse#5" = 2
var"##cse#6" = (^)((getindex)(X, 1), var"##cse#5")
var"##cse#7" = (*)(var"##cse#5", var"##cse#6")
var"##cse#8" = (/)(var"##cse#4", var"##cse#7")
var"##cse#9" = (*)(var"##cse#1", params.b₁)
var"##cse#10" = (/)(var"##cse#9", (getindex)(X, 1))
var"##cse#11" = (*)(var"##cse#1", (getindex)(V, 2))
var"##cse#12" = (*)((*)(var"##cse#5", (getindex)(X, 2)), (getindex)(X, 1))
var"##cse#13" = (/)(var"##cse#11", var"##cse#12")
var"##cse#14" = (+)((+)((+)(var"##cse#2", var"##cse#8"), var"##cse#10"), var"##cse#13")
var"##cse#15" = (/)((getindex)(V, 1), var"##cse#12")
var"##cse#16" = (log)((getindex)(X, 1))
var"##cse#17" = (*)(var"##cse#16", (getindex)(V, 2))
var"##cse#18" = (^)((getindex)(X, 2), var"##cse#5")
var"##cse#19" = (*)(var"##cse#5", var"##cse#18")
var"##cse#20" = (/)(var"##cse#17", var"##cse#19")
var"##cse#21" = (*)(var"##cse#1", params.a₂)
var"##cse#22" = (*)(var"##cse#1", params.b₂)
var"##cse#23" = (/)(var"##cse#22", (getindex)(X, 2))
var"##cse#24" = (+)((+)((+)(var"##cse#15", var"##cse#20"), var"##cse#21"), var"##cse#23")
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1298 =# @inbounds begin
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1294 =#
ˍ₋out[1] = var"##cse#14"
ˍ₋out[2] = var"##cse#24"
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1296 =#
ˍ₋out
end
end
end
end))
g = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :Λ, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x84b82c96, 0xb6498796, 0x11372415, 0xebfc98cc, 0x675a5c29), Expr}(:(#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =# @inbounds begin
#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =#
begin
begin
var"##cse#1" = -1
var"##cse#2" = (log)((getindex)(X, 2))
var"##cse#3" = (*)((*)(var"##cse#1", (getindex)(V, 1)), var"##cse#2")
var"##cse#4" = 2
var"##cse#5" = (^)((getindex)(X, 1), var"##cse#4")
var"##cse#6" = (*)(var"##cse#4", var"##cse#5")
var"##cse#7" = (/)(var"##cse#3", var"##cse#6")
var"##cse#8" = (*)(var"##cse#1", (getindex)(V, 2))
var"##cse#9" = (*)((*)(var"##cse#4", (getindex)(X, 2)), (getindex)(X, 1))
var"##cse#10" = (/)(var"##cse#8", var"##cse#9")
var"##cse#11" = (+)(var"##cse#7", var"##cse#10")
var"##cse#12" = (/)((getindex)(V, 1), var"##cse#9")
var"##cse#13" = (log)((getindex)(X, 1))
var"##cse#14" = (*)(var"##cse#13", (getindex)(V, 2))
var"##cse#15" = (^)((getindex)(X, 2), var"##cse#4")
var"##cse#16" = (*)(var"##cse#4", var"##cse#15")
var"##cse#17" = (/)(var"##cse#14", var"##cse#16")
var"##cse#18" = (+)(var"##cse#12", var"##cse#17")
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1298 =# @inbounds begin
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1294 =#
ˍ₋out[1] = var"##cse#11"
ˍ₋out[2] = var"##cse#18"
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1296 =#
ˍ₋out
end
end
end
end))
Lagrangian: L = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x9be3e3aa, 0x14d185ed, 0xf83c89d1, 0x325b8b15, 0xd78cd53a), Expr}(:(#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:198 =# @inbounds begin
#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:198 =#
begin
begin
var"##cse#1" = -1
var"##cse#2" = (log)((getindex)(X, 2))
var"##cse#3" = (*)((*)(var"##cse#1", var"##cse#2"), params.b₂)
var"##cse#4" = (*)((*)(var"##cse#1", (getindex)(X, 1)), params.a₁)
var"##cse#5" = (*)((getindex)(V, 1), var"##cse#2")
var"##cse#6" = 2
var"##cse#7" = (*)(var"##cse#6", (getindex)(X, 1))
var"##cse#8" = (/)(var"##cse#5", var"##cse#7")
var"##cse#9" = (*)((*)(var"##cse#1", (getindex)(X, 2)), params.a₂)
var"##cse#10" = (log)((getindex)(X, 1))
var"##cse#11" = (*)((*)(var"##cse#1", var"##cse#10"), (getindex)(V, 2))
var"##cse#12" = (*)(var"##cse#6", (getindex)(X, 2))
var"##cse#13" = (/)(var"##cse#11", var"##cse#12")
var"##cse#14" = (*)((*)(var"##cse#1", var"##cse#10"), params.b₁)
var"##cse#15" = (+)((+)((+)((+)((+)(var"##cse#3", var"##cse#4"), var"##cse#8"), var"##cse#9"), var"##cse#13"), var"##cse#14")
var"##cse#15"
end
end
end))
Invariants:
(h = EulerLagrange.var"#111#112"{@NamedTuple{L::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x9be3e3aa, 0x14d185ed, 0xf83c89d1, 0x325b8b15, 0xd78cd53a), Expr}, H::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:t, :X, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x3ad5635f, 0xa76a429c, 0xa509f863, 0x81b3d634, 0x2577a6b9), Expr}, EL::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xdbad5456, 0x2facc5df, 0xee16ffa6, 0x46d51492, 0xd51d9d1b), Expr}, ∇H::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x43f1f8f6, 0x3806ec8a, 0x4f38349f, 0xc6dd51c0, 0xc2bacc50), Expr}, ẋ::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xdbae5857, 0x2757c9d6, 0x2f4e0f78, 0x29aa5454, 0x768d7c8e), Expr}, v::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :P, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xdbae5857, 0x2757c9d6, 0x2f4e0f78, 0x29aa5454, 0x768d7c8e), Expr}, f::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x3bb80120, 0x94b5ca74, 0xbe3ca2a1, 0x564ec167, 0x5ab9c933), Expr}, u::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :Λ, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x46371b34, 0xde7758bd, 0x645c9d07, 0xc0897de9, 0x38bd4dc0), Expr}, g::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :Λ, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x84b82c96, 0xb6498796, 0x11372415, 0xebfc98cc, 0x675a5c29), Expr}, ū::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :Λ, :P, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x46371b34, 0xde7758bd, 0x645c9d07, 0xc0897de9, 0x38bd4dc0), Expr}, ḡ::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :Λ, :P, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x03435e43, 0x8fbc9b5f, 0x3c435bb3, 0x5150e623, 0xbcf9ebab), Expr}, p::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x8306e311, 0x99f3345e, 0xa3f7b022, 0x4222fd4a, 0xae6d502b), Expr}, ϑ::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xdaede812, 0x49637e5e, 0x29975e81, 0xe7fdcb13, 0xde62505f), Expr}, ω::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x128dcdb5, 0xa207cef1, 0xece99d34, 0x6b2b9c1a, 0xbd15c1d5), Expr}, ϕ::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :P, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x6a32774f, 0x24bcf5d7, 0x5a6af401, 0xdc73dc97, 0x9a64f1ea), Expr}, ψ::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :P, :Ẋ, :F, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xa926b78b, 0xc665c30e, 0xfe71e706, 0x820a837a, 0xb94fb132), Expr}, P::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xb603396e, 0xd77a3cc1, 0xb5efe983, 0xb5863e85, 0xc5ee5ff4), Expr}}}((L = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x9be3e3aa, 0x14d185ed, 0xf83c89d1, 0x325b8b15, 0xd78cd53a), Expr}(:(#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:198 =# @inbounds begin
#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:198 =#
begin
begin
var"##cse#1" = -1
var"##cse#2" = (log)((getindex)(X, 2))
var"##cse#3" = (*)((*)(var"##cse#1", var"##cse#2"), params.b₂)
var"##cse#4" = (*)((*)(var"##cse#1", (getindex)(X, 1)), params.a₁)
var"##cse#5" = (*)((getindex)(V, 1), var"##cse#2")
var"##cse#6" = 2
var"##cse#7" = (*)(var"##cse#6", (getindex)(X, 1))
var"##cse#8" = (/)(var"##cse#5", var"##cse#7")
var"##cse#9" = (*)((*)(var"##cse#1", (getindex)(X, 2)), params.a₂)
var"##cse#10" = (log)((getindex)(X, 1))
var"##cse#11" = (*)((*)(var"##cse#1", var"##cse#10"), (getindex)(V, 2))
var"##cse#12" = (*)(var"##cse#6", (getindex)(X, 2))
var"##cse#13" = (/)(var"##cse#11", var"##cse#12")
var"##cse#14" = (*)((*)(var"##cse#1", var"##cse#10"), params.b₁)
var"##cse#15" = (+)((+)((+)((+)((+)(var"##cse#3", var"##cse#4"), var"##cse#8"), var"##cse#9"), var"##cse#13"), var"##cse#14")
var"##cse#15"
end
end
end)), H = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:t, :X, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x3ad5635f, 0xa76a429c, 0xa509f863, 0x81b3d634, 0x2577a6b9), Expr}(:(#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:198 =# @inbounds begin
#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:198 =#
begin
begin
var"##cse#1" = (log)((getindex)(X, 2))
var"##cse#2" = (*)(var"##cse#1", params.b₂)
var"##cse#3" = (*)((getindex)(X, 1), params.a₁)
var"##cse#4" = (*)((getindex)(X, 2), params.a₂)
var"##cse#5" = (log)((getindex)(X, 1))
var"##cse#6" = (*)(var"##cse#5", params.b₁)
var"##cse#7" = (+)((+)((+)(var"##cse#2", var"##cse#3"), var"##cse#4"), var"##cse#6")
var"##cse#7"
end
end
end)), EL = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xdbad5456, 0x2facc5df, 0xee16ffa6, 0x46d51492, 0xd51d9d1b), Expr}(:(#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =# @inbounds begin
#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =#
begin
begin
var"##cse#1" = -1
var"##cse#2" = (*)(var"##cse#1", params.a₁)
var"##cse#3" = (*)(var"##cse#1", params.b₁)
var"##cse#4" = (/)(var"##cse#3", (getindex)(X, 1))
var"##cse#5" = (+)(var"##cse#2", var"##cse#4")
var"##cse#6" = (*)(var"##cse#1", params.a₂)
var"##cse#7" = (*)(var"##cse#1", params.b₂)
var"##cse#8" = (/)(var"##cse#7", (getindex)(X, 2))
var"##cse#9" = (+)(var"##cse#6", var"##cse#8")
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1298 =# @inbounds begin
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1294 =#
ˍ₋out[1] = var"##cse#5"
ˍ₋out[2] = var"##cse#9"
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1296 =#
ˍ₋out
end
end
end
end)), ∇H = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x43f1f8f6, 0x3806ec8a, 0x4f38349f, 0xc6dd51c0, 0xc2bacc50), Expr}(:(#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =# @inbounds begin
#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =#
begin
begin
var"##cse#1" = (/)(params.b₁, (getindex)(X, 1))
var"##cse#2" = (+)(params.a₁, var"##cse#1")
var"##cse#3" = (/)(params.b₂, (getindex)(X, 2))
var"##cse#4" = (+)(params.a₂, var"##cse#3")
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1298 =# @inbounds begin
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1294 =#
ˍ₋out[1] = var"##cse#2"
ˍ₋out[2] = var"##cse#4"
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1296 =#
ˍ₋out
end
end
end
end)), ẋ = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xdbae5857, 0x2757c9d6, 0x2f4e0f78, 0x29aa5454, 0x768d7c8e), Expr}(:(#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =# @inbounds begin
#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =#
begin
begin
var"##cse#1" = (/)(params.b₂, (getindex)(X, 2))
var"##cse#2" = (+)(params.a₂, var"##cse#1")
var"##cse#3" = (*)((*)((getindex)(X, 2), (getindex)(X, 1)), var"##cse#2")
var"##cse#4" = -1
var"##cse#5" = (/)(params.b₁, (getindex)(X, 1))
var"##cse#6" = (+)(params.a₁, var"##cse#5")
var"##cse#7" = (*)((*)((*)(var"##cse#4", (getindex)(X, 2)), (getindex)(X, 1)), var"##cse#6")
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1298 =# @inbounds begin
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1294 =#
ˍ₋out[1] = var"##cse#3"
ˍ₋out[2] = var"##cse#7"
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1296 =#
ˍ₋out
end
end
end
end)), v = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :P, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xdbae5857, 0x2757c9d6, 0x2f4e0f78, 0x29aa5454, 0x768d7c8e), Expr}(:(#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =# @inbounds begin
#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =#
begin
begin
var"##cse#1" = (/)(params.b₂, (getindex)(X, 2))
var"##cse#2" = (+)(params.a₂, var"##cse#1")
var"##cse#3" = (*)((*)((getindex)(X, 2), (getindex)(X, 1)), var"##cse#2")
var"##cse#4" = -1
var"##cse#5" = (/)(params.b₁, (getindex)(X, 1))
var"##cse#6" = (+)(params.a₁, var"##cse#5")
var"##cse#7" = (*)((*)((*)(var"##cse#4", (getindex)(X, 2)), (getindex)(X, 1)), var"##cse#6")
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1298 =# @inbounds begin
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1294 =#
ˍ₋out[1] = var"##cse#3"
ˍ₋out[2] = var"##cse#7"
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1296 =#
ˍ₋out
end
end
end
end)), f = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x3bb80120, 0x94b5ca74, 0xbe3ca2a1, 0x564ec167, 0x5ab9c933), Expr}(:(#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =# @inbounds begin
#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =#
begin
begin
var"##cse#1" = -1
var"##cse#2" = (*)(var"##cse#1", params.a₁)
var"##cse#3" = (log)((getindex)(X, 2))
var"##cse#4" = (*)((*)(var"##cse#1", (getindex)(V, 1)), var"##cse#3")
var"##cse#5" = 2
var"##cse#6" = (^)((getindex)(X, 1), var"##cse#5")
var"##cse#7" = (*)(var"##cse#5", var"##cse#6")
var"##cse#8" = (/)(var"##cse#4", var"##cse#7")
var"##cse#9" = (*)(var"##cse#1", params.b₁)
var"##cse#10" = (/)(var"##cse#9", (getindex)(X, 1))
var"##cse#11" = (*)(var"##cse#1", (getindex)(V, 2))
var"##cse#12" = (*)((*)(var"##cse#5", (getindex)(X, 2)), (getindex)(X, 1))
var"##cse#13" = (/)(var"##cse#11", var"##cse#12")
var"##cse#14" = (+)((+)((+)(var"##cse#2", var"##cse#8"), var"##cse#10"), var"##cse#13")
var"##cse#15" = (/)((getindex)(V, 1), var"##cse#12")
var"##cse#16" = (log)((getindex)(X, 1))
var"##cse#17" = (*)(var"##cse#16", (getindex)(V, 2))
var"##cse#18" = (^)((getindex)(X, 2), var"##cse#5")
var"##cse#19" = (*)(var"##cse#5", var"##cse#18")
var"##cse#20" = (/)(var"##cse#17", var"##cse#19")
var"##cse#21" = (*)(var"##cse#1", params.a₂)
var"##cse#22" = (*)(var"##cse#1", params.b₂)
var"##cse#23" = (/)(var"##cse#22", (getindex)(X, 2))
var"##cse#24" = (+)((+)((+)(var"##cse#15", var"##cse#20"), var"##cse#21"), var"##cse#23")
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1298 =# @inbounds begin
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1294 =#
ˍ₋out[1] = var"##cse#14"
ˍ₋out[2] = var"##cse#24"
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1296 =#
ˍ₋out
end
end
end
end)), u = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :Λ, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x46371b34, 0xde7758bd, 0x645c9d07, 0xc0897de9, 0x38bd4dc0), Expr}(:(#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =# @inbounds begin
#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =#
begin
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1298 =# @inbounds begin
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1294 =#
ˍ₋out[1] = (getindex)(V, 1)
ˍ₋out[2] = (getindex)(V, 2)
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1296 =#
ˍ₋out
end
end
end)), g = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :Λ, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x84b82c96, 0xb6498796, 0x11372415, 0xebfc98cc, 0x675a5c29), Expr}(:(#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =# @inbounds begin
#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =#
begin
begin
var"##cse#1" = -1
var"##cse#2" = (log)((getindex)(X, 2))
var"##cse#3" = (*)((*)(var"##cse#1", (getindex)(V, 1)), var"##cse#2")
var"##cse#4" = 2
var"##cse#5" = (^)((getindex)(X, 1), var"##cse#4")
var"##cse#6" = (*)(var"##cse#4", var"##cse#5")
var"##cse#7" = (/)(var"##cse#3", var"##cse#6")
var"##cse#8" = (*)(var"##cse#1", (getindex)(V, 2))
var"##cse#9" = (*)((*)(var"##cse#4", (getindex)(X, 2)), (getindex)(X, 1))
var"##cse#10" = (/)(var"##cse#8", var"##cse#9")
var"##cse#11" = (+)(var"##cse#7", var"##cse#10")
var"##cse#12" = (/)((getindex)(V, 1), var"##cse#9")
var"##cse#13" = (log)((getindex)(X, 1))
var"##cse#14" = (*)(var"##cse#13", (getindex)(V, 2))
var"##cse#15" = (^)((getindex)(X, 2), var"##cse#4")
var"##cse#16" = (*)(var"##cse#4", var"##cse#15")
var"##cse#17" = (/)(var"##cse#14", var"##cse#16")
var"##cse#18" = (+)(var"##cse#12", var"##cse#17")
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1298 =# @inbounds begin
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1294 =#
ˍ₋out[1] = var"##cse#11"
ˍ₋out[2] = var"##cse#18"
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1296 =#
ˍ₋out
end
end
end
end)), ū = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :Λ, :P, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x46371b34, 0xde7758bd, 0x645c9d07, 0xc0897de9, 0x38bd4dc0), Expr}(:(#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =# @inbounds begin
#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =#
begin
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1298 =# @inbounds begin
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1294 =#
ˍ₋out[1] = (getindex)(V, 1)
ˍ₋out[2] = (getindex)(V, 2)
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1296 =#
ˍ₋out
end
end
end)), ḡ = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :Λ, :P, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x03435e43, 0x8fbc9b5f, 0x3c435bb3, 0x5150e623, 0xbcf9ebab), Expr}(:(#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =# @inbounds begin
#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =#
begin
begin
var"##cse#1" = -1
var"##cse#2" = (log)((getindex)(X, 2))
var"##cse#3" = (*)((*)(var"##cse#1", (getindex)(V, 1)), var"##cse#2")
var"##cse#4" = 2
var"##cse#5" = (^)((getindex)(X, 1), var"##cse#4")
var"##cse#6" = (*)(var"##cse#4", var"##cse#5")
var"##cse#7" = (/)(var"##cse#3", var"##cse#6")
var"##cse#8" = (*)((*)(var"##cse#4", (getindex)(X, 2)), (getindex)(X, 1))
var"##cse#9" = (/)((getindex)(V, 2), var"##cse#8")
var"##cse#10" = (+)(var"##cse#7", var"##cse#9")
var"##cse#11" = (log)((getindex)(X, 1))
var"##cse#12" = (*)(var"##cse#11", (getindex)(V, 2))
var"##cse#13" = (^)((getindex)(X, 2), var"##cse#4")
var"##cse#14" = (*)(var"##cse#4", var"##cse#13")
var"##cse#15" = (/)(var"##cse#12", var"##cse#14")
var"##cse#16" = (*)(var"##cse#1", (getindex)(V, 1))
var"##cse#17" = (/)(var"##cse#16", var"##cse#8")
var"##cse#18" = (+)(var"##cse#15", var"##cse#17")
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1298 =# @inbounds begin
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1294 =#
ˍ₋out[1] = var"##cse#10"
ˍ₋out[2] = var"##cse#18"
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1296 =#
ˍ₋out
end
end
end
end)), p = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x8306e311, 0x99f3345e, 0xa3f7b022, 0x4222fd4a, 0xae6d502b), Expr}(:(#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:454 =# @inbounds begin
#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:454 =#
begin
begin
var"##cse#1" = (log)((getindex)(X, 2))
var"##cse#2" = 2
var"##cse#3" = (*)(var"##cse#2", (getindex)(X, 1))
var"##cse#4" = (/)(var"##cse#1", var"##cse#3")
var"##cse#5" = -1
var"##cse#6" = (log)((getindex)(X, 1))
var"##cse#7" = (*)(var"##cse#5", var"##cse#6")
var"##cse#8" = (*)(var"##cse#2", (getindex)(X, 2))
var"##cse#9" = (/)(var"##cse#7", var"##cse#8")
begin
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1363 =#
(SymbolicUtils.Code.create_array)(Array, nothing, Val{1}(), Val{(2,)}(), var"##cse#4", var"##cse#9")
end
end
end
end)), ϑ = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xdaede812, 0x49637e5e, 0x29975e81, 0xe7fdcb13, 0xde62505f), Expr}(:(#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =# @inbounds begin
#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =#
begin
begin
var"##cse#1" = (log)((getindex)(X, 2))
var"##cse#2" = 2
var"##cse#3" = (*)(var"##cse#2", (getindex)(X, 1))
var"##cse#4" = (/)(var"##cse#1", var"##cse#3")
var"##cse#5" = -1
var"##cse#6" = (log)((getindex)(X, 1))
var"##cse#7" = (*)(var"##cse#5", var"##cse#6")
var"##cse#8" = (*)(var"##cse#2", (getindex)(X, 2))
var"##cse#9" = (/)(var"##cse#7", var"##cse#8")
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1298 =# @inbounds begin
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1294 =#
ˍ₋out[1] = var"##cse#4"
ˍ₋out[2] = var"##cse#9"
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1296 =#
ˍ₋out
end
end
end
end)), ω = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x128dcdb5, 0xa207cef1, 0xece99d34, 0x6b2b9c1a, 0xbd15c1d5), Expr}(:(#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =# @inbounds begin
#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =#
begin
begin
var"##cse#1" = 0
var"##cse#2" = 1
var"##cse#3" = (*)((getindex)(X, 2), (getindex)(X, 1))
var"##cse#4" = (/)(var"##cse#2", var"##cse#3")
var"##cse#5" = -1
var"##cse#6" = (/)(var"##cse#5", var"##cse#3")
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1298 =# @inbounds begin
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1294 =#
ˍ₋out[1] = var"##cse#1"
ˍ₋out[2] = var"##cse#4"
ˍ₋out[3] = var"##cse#6"
ˍ₋out[4] = var"##cse#1"
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1296 =#
ˍ₋out
end
end
end
end)), ϕ = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :P, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x6a32774f, 0x24bcf5d7, 0x5a6af401, 0xdc73dc97, 0x9a64f1ea), Expr}(:(#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =# @inbounds begin
#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =#
begin
begin
var"##cse#1" = -1
var"##cse#2" = (log)((getindex)(X, 2))
var"##cse#3" = (*)(var"##cse#1", var"##cse#2")
var"##cse#4" = 2
var"##cse#5" = (*)(var"##cse#4", (getindex)(X, 1))
var"##cse#6" = (/)(var"##cse#3", var"##cse#5")
var"##cse#7" = (+)(var"##cse#6", (getindex)(P, 1))
var"##cse#8" = (log)((getindex)(X, 1))
var"##cse#9" = (*)(var"##cse#4", (getindex)(X, 2))
var"##cse#10" = (/)(var"##cse#8", var"##cse#9")
var"##cse#11" = (+)((getindex)(P, 2), var"##cse#10")
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1298 =# @inbounds begin
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1294 =#
ˍ₋out[1] = var"##cse#7"
ˍ₋out[2] = var"##cse#11"
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1296 =#
ˍ₋out
end
end
end
end)), ψ = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :P, :Ẋ, :F, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xa926b78b, 0xc665c30e, 0xfe71e706, 0x820a837a, 0xb94fb132), Expr}(:(#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =# @inbounds begin
#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =#
begin
begin
var"##cse#1" = -1
var"##cse#2" = (log)((getindex)(X, 2))
var"##cse#3" = (*)((*)(var"##cse#1", (getindex)(Ẋ, 1)), var"##cse#2")
var"##cse#4" = 2
var"##cse#5" = (^)((getindex)(X, 1), var"##cse#4")
var"##cse#6" = (*)(var"##cse#4", var"##cse#5")
var"##cse#7" = (/)(var"##cse#3", var"##cse#6")
var"##cse#8" = (*)(var"##cse#1", var"##cse#7")
var"##cse#9" = (*)((*)(var"##cse#4", (getindex)(X, 2)), (getindex)(X, 1))
var"##cse#10" = (/)((getindex)(Ẋ, 2), var"##cse#9")
var"##cse#11" = (*)(var"##cse#1", var"##cse#10")
var"##cse#12" = (+)((+)(var"##cse#8", (getindex)(F, 1)), var"##cse#11")
var"##cse#13" = (*)(var"##cse#1", (getindex)(Ẋ, 1))
var"##cse#14" = (/)(var"##cse#13", var"##cse#9")
var"##cse#15" = (*)(var"##cse#1", var"##cse#14")
var"##cse#16" = (log)((getindex)(X, 1))
var"##cse#17" = (*)((getindex)(Ẋ, 2), var"##cse#16")
var"##cse#18" = (^)((getindex)(X, 2), var"##cse#4")
var"##cse#19" = (*)(var"##cse#4", var"##cse#18")
var"##cse#20" = (/)(var"##cse#17", var"##cse#19")
var"##cse#21" = (*)(var"##cse#1", var"##cse#20")
var"##cse#22" = (+)((+)(var"##cse#15", var"##cse#21"), (getindex)(F, 2))
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1298 =# @inbounds begin
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1294 =#
ˍ₋out[1] = var"##cse#12"
ˍ₋out[2] = var"##cse#22"
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1296 =#
ˍ₋out
end
end
end
end)), P = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xb603396e, 0xd77a3cc1, 0xb5efe983, 0xb5863e85, 0xc5ee5ff4), Expr}(:(#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =# @inbounds begin
#= /home/runner/.julia/packages/Symbolics/KL0Tx/src/build_function.jl:456 =#
begin
begin
var"##cse#1" = 0
var"##cse#2" = -1
var"##cse#3" = (*)((*)(var"##cse#2", (getindex)(X, 2)), (getindex)(X, 1))
var"##cse#4" = (*)((getindex)(X, 2), (getindex)(X, 1))
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1298 =# @inbounds begin
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1294 =#
ˍ₋out[1] = var"##cse#1"
ˍ₋out[2] = var"##cse#3"
ˍ₋out[3] = var"##cse#4"
ˍ₋out[4] = var"##cse#1"
#= /home/runner/.julia/packages/SymbolicUtils/HQQQT/src/code.jl:1296 =#
ˍ₋out
end
end
end
end)))),)
Timespan: (0.0, 10.0)
Timestep: 0.01
Initial conditions:
(t = fill(0.0), q = [2.0, 1.0], p = [0.0, -0.34657359027997264], v = [2.0, 1.0])
Parameters:
(a₁ = -1.0, a₂ = -1.0, b₁ = 1.0, b₂ = 2.0)We can integrate this system using GeometricIntegrators:
using GeometricIntegrators
sol = integrate(lprob, Gauss(1))
using CairoMakie
fig = lines(parent(sol.q[:,1]), parent(sol.q[:,2]);
axis = (; xlabel = "x₁", ylabel = "x₂", title = "Lotka-Volterra system in 2d"),
figure = (; size = (800,600), fontsize = 22))