diff --git a/latest/.documenter-siteinfo.json b/latest/.documenter-siteinfo.json index 582a68d..fb1552f 100644 --- a/latest/.documenter-siteinfo.json +++ b/latest/.documenter-siteinfo.json @@ -1 +1 @@ -{"documenter":{"julia_version":"1.11.2","generation_timestamp":"2024-12-12T09:20:36","documenter_version":"1.8.0"}} \ No newline at end of file +{"documenter":{"julia_version":"1.11.2","generation_timestamp":"2024-12-12T10:45:27","documenter_version":"1.8.0"}} \ No newline at end of file diff --git a/latest/caveats/index.html b/latest/caveats/index.html index 4571b5a..bc4ede1 100644 --- a/latest/caveats/index.html +++ b/latest/caveats/index.html @@ -1,2 +1,2 @@ -Caveats · EulerLagrange.jl

Caveats

In the following, we sketch some caveats and limitations of the package that may be useful to be aware of.

Simplicity

The Hamiltonian or Lagrangian should be provided in a form as simple as possible to aid the symbolic algebra system. Many expressions lead to involved symbolic expressions that can be hard to differentiate and lead to errors in the code generation pipeline.

For example, scalar products should be specified as x ⋅ x and not as x' * x. As the transposition also entails complex conjugation, the resulting symbolic expression is substantially more complicated, which can cause problems down the line.

Another potential problem is an array operation, like the dot product, that is preceded by scalar multiplication like in α * x ⋅ x. This can cause problems due to the order of operations, which is (α * x) ⋅ x, where first x is rescaled by α, implying the creation of a temporary array holding the result, which is then contracted with x. This should rather be expressed as x ⋅ x * α or α * (x ⋅ x), where the scalar product is computed first and then the result, which now is just a scalar, is multiplied by α.

Parameters

The handling of parameters requires some massaging of the code generated by Symbolics.jl. To facilitate this, symbolic parameters get attached to their names.

Initial Guesses

For some problems, in particular regular Lagrangian systems, it is in general not straightforward to automatically compute a first-order system of equations to be used as an initial guess for x in GeometricIntegrators. To circumvent this issue, it is possible to manually specify a function that computes the vector field to the LODE and LODEProblem constructors via the keyword. It is also possible to provide a vector field for the initial guess of p via the keyword, although this is usually not necessary as can be derived automatically. The same keyword arguments exist for the respective constructors of degenerate Lagrangian systems, although also here the vector fields are provided by default.

+Caveats · EulerLagrange.jl

Caveats

In the following, we sketch some caveats and limitations of the package that may be useful to be aware of.

Simplicity

The Hamiltonian or Lagrangian should be provided in a form as simple as possible to aid the symbolic algebra system. Many expressions lead to involved symbolic expressions that can be hard to differentiate and lead to errors in the code generation pipeline.

For example, scalar products should be specified as x ⋅ x and not as x' * x. As the transposition also entails complex conjugation, the resulting symbolic expression is substantially more complicated, which can cause problems down the line.

Another potential problem is an array operation, like the dot product, that is preceded by scalar multiplication like in α * x ⋅ x. This can cause problems due to the order of operations, which is (α * x) ⋅ x, where first x is rescaled by α, implying the creation of a temporary array holding the result, which is then contracted with x. This should rather be expressed as x ⋅ x * α or α * (x ⋅ x), where the scalar product is computed first and then the result, which now is just a scalar, is multiplied by α.

Parameters

The handling of parameters requires some massaging of the code generated by Symbolics.jl. To facilitate this, symbolic parameters get attached to their names.

Initial Guesses

For some problems, in particular regular Lagrangian systems, it is in general not straightforward to automatically compute a first-order system of equations to be used as an initial guess for x in GeometricIntegrators. To circumvent this issue, it is possible to manually specify a function that computes the vector field to the LODE and LODEProblem constructors via the keyword. It is also possible to provide a vector field for the initial guess of p via the keyword, although this is usually not necessary as can be derived automatically. The same keyword arguments exist for the respective constructors of degenerate Lagrangian systems, although also here the vector fields are provided by default.

diff --git a/latest/degenerate_lagrangian/index.html b/latest/degenerate_lagrangian/index.html index e62844b..c0b917c 100644 --- a/latest/degenerate_lagrangian/index.html +++ b/latest/degenerate_lagrangian/index.html @@ -71,7 +71,7 @@ end) Invariants: - (h = EulerLagrange.var"#86#87"{@NamedTuple{L::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xfc4f47a4, 0x4fbe2d9e, 0x542e7e9b, 0xc4e07e8e, 0x44c0c820), Expr}, H::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:t, :X, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x1fd90528, 0xad128186, 0xac9fbe57, 0xcaac718b, 0xf104b744), Expr}, EL::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xbfa88298, 0xe4eeac6c, 0x6282c223, 0x0f2d42df, 0x0be87f06), Expr}, ∇H::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xb02a312d, 0xdcc8f664, 0x77fea323, 0x3c6e1dcf, 0x85143e8a), Expr}, ẋ::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xcd1ffa8c, 0xc4441362, 0xe0f83747, 0x1beb287f, 0xa154b416), Expr}, v::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :P, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xcd1ffa8c, 0xc4441362, 0xe0f83747, 0x1beb287f, 0xa154b416), Expr}, f::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xad437f9d, 0xbc3e83f1, 0x0fcc84bd, 0xc003e345, 0x864d5cf8), Expr}, u::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :Λ, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x9074dbae, 0x9dbd5857, 0x29f62319, 0xac7fc940, 0x64f9e588), Expr}, g::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :Λ, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xc952f36d, 0x0b3274a1, 0x5a98bf60, 0x2329f298, 0x8174cb0d), Expr}, ū::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :Λ, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x9074dbae, 0x9dbd5857, 0x29f62319, 0xac7fc940, 0x64f9e588), Expr}, ḡ::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :Λ, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x5dd8f1c1, 0x64ee23ef, 0x65d6e415, 0x93a2dcf0, 0xc9116c7a), Expr}, p::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xdeb1e969, 0x01b4695d, 0x35148672, 0xdc0212d8, 0xfddd0261), Expr}, ϑ::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x2b6796c5, 0xc7038f1c, 0x05aaa4f2, 0xa7a37a31, 0xb6170ee9), Expr}, ω::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x9f1dd65e, 0xe98e31d6, 0xc077f403, 0xbf1d9b2a, 0xfdcf4fcd), Expr}, ϕ::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:t, :X, :V, :P, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xe21cfbf8, 0xc28df3ae, 0x62855d93, 0xfe1be697, 0xf6236387), Expr}, ψ::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:t, :X, :V, :P, :F, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x642758f9, 0x5ec59e2d, 0x036d954e, 0x15f1012c, 0x129ea957), Expr}, P::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xb3beb4ec, 0x1199f700, 0x9e11c355, 0x025bf187, 0xfd792d21), Expr}}}((L = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xfc4f47a4, 0x4fbe2d9e, 0x542e7e9b, 0xc4e07e8e, 0x44c0c820), Expr}(quote + (h = EulerLagrange.var"#90#91"{@NamedTuple{L::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xfc4f47a4, 0x4fbe2d9e, 0x542e7e9b, 0xc4e07e8e, 0x44c0c820), Expr}, H::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:t, :X, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x1fd90528, 0xad128186, 0xac9fbe57, 0xcaac718b, 0xf104b744), Expr}, EL::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xbfa88298, 0xe4eeac6c, 0x6282c223, 0x0f2d42df, 0x0be87f06), Expr}, ∇H::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xb02a312d, 0xdcc8f664, 0x77fea323, 0x3c6e1dcf, 0x85143e8a), Expr}, ẋ::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xcd1ffa8c, 0xc4441362, 0xe0f83747, 0x1beb287f, 0xa154b416), Expr}, v::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :P, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xcd1ffa8c, 0xc4441362, 0xe0f83747, 0x1beb287f, 0xa154b416), Expr}, f::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xad437f9d, 0xbc3e83f1, 0x0fcc84bd, 0xc003e345, 0x864d5cf8), Expr}, u::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :Λ, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x9074dbae, 0x9dbd5857, 0x29f62319, 0xac7fc940, 0x64f9e588), Expr}, g::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :Λ, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xc952f36d, 0x0b3274a1, 0x5a98bf60, 0x2329f298, 0x8174cb0d), Expr}, ū::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :Λ, :P, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x9074dbae, 0x9dbd5857, 0x29f62319, 0xac7fc940, 0x64f9e588), Expr}, ḡ::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :Λ, :P, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x5dd8f1c1, 0x64ee23ef, 0x65d6e415, 0x93a2dcf0, 0xc9116c7a), Expr}, p::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xdeb1e969, 0x01b4695d, 0x35148672, 0xdc0212d8, 0xfddd0261), Expr}, ϑ::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x2b6796c5, 0xc7038f1c, 0x05aaa4f2, 0xa7a37a31, 0xb6170ee9), Expr}, ω::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x9f1dd65e, 0xe98e31d6, 0xc077f403, 0xbf1d9b2a, 0xfdcf4fcd), Expr}, ϕ::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :P, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x5fc08be0, 0x9d1c6478, 0x1fc693e6, 0x049c9ff7, 0x07f82e11), Expr}, ψ::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :P, :F, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x1385c301, 0x477bd586, 0x5d26ff37, 0xfad84fef, 0x150de6c6), Expr}, P::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xb3beb4ec, 0x1199f700, 0x9e11c355, 0x025bf187, 0xfd792d21), Expr}}}((L = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xfc4f47a4, 0x4fbe2d9e, 0x542e7e9b, 0xc4e07e8e, 0x44c0c820), Expr}(quote #= none:1 =# #= none:5 =# ((((((1 // 2 * getindex(V, 1)) * getindex(X, 2)) * log(getindex(X, 2)) + ((-1 // 2 * getindex(V, 2)) * getindex(X, 1)) * log(getindex(X, 1))) / (getindex(X, 1) * getindex(X, 2)) + (-1 * getindex(X, 1)) * params.a₁) + (-1 * getindex(X, 2)) * params.a₂) + (-1 * params.b₁) * log(getindex(X, 1))) + (-1 * params.b₂) * log(getindex(X, 2)) @@ -177,7 +177,7 @@ nothing end end -end), ū = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :Λ, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x9074dbae, 0x9dbd5857, 0x29f62319, 0xac7fc940, 0x64f9e588), Expr}(quote +end), ū = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :Λ, :P, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x9074dbae, 0x9dbd5857, 0x29f62319, 0xac7fc940, 0x64f9e588), Expr}(quote #= none:1 =# #= none:5 =# begin @@ -191,7 +191,7 @@ nothing end end -end), ḡ = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :Λ, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x5dd8f1c1, 0x64ee23ef, 0x65d6e415, 0x93a2dcf0, 0xc9116c7a), Expr}(quote +end), ḡ = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :Λ, :P, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x5dd8f1c1, 0x64ee23ef, 0x65d6e415, 0x93a2dcf0, 0xc9116c7a), Expr}(quote #= none:1 =# #= none:5 =# begin @@ -244,20 +244,34 @@ nothing end end -end), ϕ = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:t, :X, :V, :P, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xe21cfbf8, 0xc28df3ae, 0x62855d93, 0xfe1be697, 0xf6236387), Expr}(quote +end), ϕ = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :P, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x5fc08be0, 0x9d1c6478, 0x1fc693e6, 0x049c9ff7, 0x07f82e11), Expr}(quote #= none:1 =# #= none:5 =# - broadcast(-, P, begin - #= none:7 =# - SymbolicUtils.Code.create_array(Vector{SymbolicUtils.BasicSymbolic{Real}}, nothing, Val{1}(), Val{(2,)}(), (1 // 2 * log(getindex(X, 2))) / getindex(X, 1), (-1 // 2 * log(getindex(X, 1))) / getindex(X, 2)) - end) -end), ψ = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:t, :X, :V, :P, :F, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x642758f9, 0x5ec59e2d, 0x036d954e, 0x15f1012c, 0x129ea957), Expr}(quote + begin + #= none:7 =# + #= none:7 =# @inbounds begin + #= none:9 =# + ˍ₋out[1] = getindex(P, 1) + (-1 // 2 * log(getindex(X, 2))) / getindex(X, 1) + #= none:10 =# + ˍ₋out[2] = getindex(P, 2) + (1 // 2 * log(getindex(X, 1))) / getindex(X, 2) + #= none:12 =# + nothing + end + end +end), ψ = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :P, :F, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x1385c301, 0x477bd586, 0x5d26ff37, 0xfad84fef, 0x150de6c6), Expr}(quote #= none:1 =# #= none:5 =# - broadcast(-, F, begin - #= none:7 =# - SymbolicUtils.Code.create_array(Vector{SymbolicUtils.BasicSymbolic{Real}}, nothing, Val{1}(), Val{(2,)}(), getindex(V, 2) / ((2 * getindex(X, 1)) * getindex(X, 2)) + ((-1 // 2 * getindex(V, 1)) * log(getindex(X, 2))) / getindex(X, 1) ^ 2, ((1 // 2 * getindex(V, 2)) * log(getindex(X, 1))) / getindex(X, 2) ^ 2 + (-1 * getindex(V, 1)) / ((2 * getindex(X, 1)) * getindex(X, 2))) - end) + begin + #= none:7 =# + #= none:7 =# @inbounds begin + #= none:9 =# + ˍ₋out[1] = (getindex(F, 1) + ((1 // 2 * getindex(V, 1)) * log(getindex(X, 2))) / getindex(X, 1) ^ 2) + (-1 * getindex(V, 2)) / ((2 * getindex(X, 1)) * getindex(X, 2)) + #= none:10 =# + ˍ₋out[2] = (getindex(F, 2) + ((-1 // 2 * getindex(V, 2)) * log(getindex(X, 1))) / getindex(X, 2) ^ 2) + getindex(V, 1) / ((2 * getindex(X, 1)) * getindex(X, 2)) + #= none:12 =# + nothing + end + end end), P = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xb3beb4ec, 0x1199f700, 0x9e11c355, 0x025bf187, 0xfd792d21), Expr}(quote #= none:1 =# #= none:5 =# @@ -291,4 +305,4 @@ 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))

+ figure = (; size = (800,600), fontsize = 22))

diff --git a/latest/hamiltonian/index.html b/latest/hamiltonian/index.html index 2f4c60d..2c596d9 100644 --- a/latest/hamiltonian/index.html +++ b/latest/hamiltonian/index.html @@ -62,4 +62,4 @@ using CairoMakie fig = lines(parent(sol.q[:,1]), parent(sol.p[:,1]); axis = (; xlabel = "q₁", ylabel = "p₁", title = "Harmonic Oscillator"), - figure = (; size = (800,600), fontsize = 22))

+ figure = (; size = (800,600), fontsize = 22))

diff --git a/latest/index.html b/latest/index.html index 073a069..5b53c8a 100644 --- a/latest/index.html +++ b/latest/index.html @@ -5,4 +5,4 @@ year={2023}, howpublished={\url{https://github.com/JuliaGNI/EulerLagrange.jl}}, doi={10.5281/zenodo.8241048} -} +} diff --git a/latest/lagrangian/index.html b/latest/lagrangian/index.html index d7868ff..65e5542 100644 --- a/latest/lagrangian/index.html +++ b/latest/lagrangian/index.html @@ -164,4 +164,4 @@ fig = lines(parent(sol.q[:,1]), parent(sol.q[:,2]); axis = (; xlabel = "x₁", ylabel = "x₂", title = "Particle moving in a square potential"), figure = (; size = (800,600), fontsize = 22))
┌ Warning: Hermite Extrapolation: q's history[1] and history[2] are identical!
-@ GeometricIntegrators.Extrapolators ~/.julia/packages/GeometricIntegrators/xUuFd/src/extrapolation/hermite.jl:211

+@ GeometricIntegrators.Extrapolators ~/.julia/packages/GeometricIntegrators/xUuFd/src/extrapolation/hermite.jl:211

diff --git a/latest/library/index.html b/latest/library/index.html index 122a618..995368e 100644 --- a/latest/library/index.html +++ b/latest/library/index.html @@ -1,2 +1,2 @@ -Library · EulerLagrange.jl
+Library · EulerLagrange.jl
diff --git a/latest/objects.inv b/latest/objects.inv index c56c8b8..5ae50d5 100644 --- a/latest/objects.inv +++ b/latest/objects.inv @@ -1,6 +1,6 @@ # Sphinx inventory version 2 # Project: EulerLagrange.jl -# Version: 0.4.0 +# Version: 0.4.1 # The remainder of this file is compressed using zlib. xRN0+VZT DWu`p"$ˉL 7k33;Yms"w 5ʕ$ޱԆh8UV `38`3"zRNY' 㔪/BN7`>;xmG!