diff --git a/latest/.documenter-siteinfo.json b/latest/.documenter-siteinfo.json index 7a9bc8e..582a68d 100644 --- a/latest/.documenter-siteinfo.json +++ b/latest/.documenter-siteinfo.json @@ -1 +1 @@ -{"documenter":{"julia_version":"1.11.2","generation_timestamp":"2024-12-05T17:05:29","documenter_version":"1.8.0"}} \ No newline at end of file +{"documenter":{"julia_version":"1.11.2","generation_timestamp":"2024-12-12T09:20:36","documenter_version":"1.8.0"}} \ No newline at end of file diff --git a/latest/caveats/index.html b/latest/caveats/index.html index a00f8c7..4571b5a 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 470cb6b..e62844b 100644 --- a/latest/degenerate_lagrangian/index.html +++ b/latest/degenerate_lagrangian/index.html @@ -48,16 +48,16 @@ end end end) - g = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :Λ, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x5dd8f1c1, 0x64ee23ef, 0x65d6e415, 0x93a2dcf0, 0xc9116c7a), Expr}(quote + g = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :Λ, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xc952f36d, 0x0b3274a1, 0x5a98bf60, 0x2329f298, 0x8174cb0d), Expr}(quote #= none:1 =# #= none:5 =# begin #= none:7 =# #= none:7 =# @inbounds begin #= none:9 =# - ˍ₋out[1] = getindex(V, 2) / ((2 * getindex(X, 1)) * getindex(X, 2)) + ((-1 // 2 * getindex(V, 1)) * log(getindex(X, 2))) / getindex(X, 1) ^ 2 + ˍ₋out[1] = (-1 // 2 * getindex(V, 2) + (-1 // 2 * getindex(V, 2)) * log(getindex(X, 1))) / (getindex(X, 1) * getindex(X, 2)) + (((-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) ^ 2 * getindex(X, 2)) #= none:10 =# - ˍ₋out[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)) + ˍ₋out[2] = (((-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) ^ 2) + (1 // 2 * getindex(V, 1) + (1 // 2 * getindex(V, 1)) * log(getindex(X, 2))) / (getindex(X, 1) * getindex(X, 2)) #= none:12 =# nothing end @@ -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", (0x314339b0, 0xc3749c1a, 0xe2bd2606, 0x019b4ddb, 0x2efbe295), 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", (0x5dd8f1c1, 0x64ee23ef, 0x65d6e415, 0x93a2dcf0, 0xc9116c7a), 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", (0xc952f36d, 0x0b3274a1, 0x5a98bf60, 0x2329f298, 0x8174cb0d), 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"#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 #= 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)) @@ -79,16 +79,16 @@ #= none:1 =# #= none:5 =# ((getindex(X, 1) * params.a₁ + getindex(X, 2) * params.a₂) + params.b₁ * log(getindex(X, 1))) + params.b₂ * log(getindex(X, 2)) -end), EL = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x314339b0, 0xc3749c1a, 0xe2bd2606, 0x019b4ddb, 0x2efbe295), Expr}(quote +end), EL = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xbfa88298, 0xe4eeac6c, 0x6282c223, 0x0f2d42df, 0x0be87f06), Expr}(quote #= none:1 =# #= none:5 =# begin #= none:7 =# #= none:7 =# @inbounds begin #= none:9 =# - ˍ₋out[1] = ((((-1 * params.a₁ + (-1 // 2 * getindex(V, 2) + (-1 // 2 * getindex(V, 2)) * log(getindex(X, 1))) / (getindex(X, 1) * getindex(X, 2))) + (-1 * params.b₁) / getindex(X, 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))) + (((-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) ^ 2 * getindex(X, 2)) + ˍ₋out[1] = -1 * params.a₁ + (-1 * params.b₁) / getindex(X, 1) #= none:10 =# - ˍ₋out[2] = ((((-1 * params.a₂ + (-1 * params.b₂) / getindex(X, 2)) + (((-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) ^ 2)) + ((-1 // 2 * getindex(V, 2)) * log(getindex(X, 1))) / getindex(X, 2) ^ 2) + (1 // 2 * getindex(V, 1) + (1 // 2 * getindex(V, 1)) * log(getindex(X, 2))) / (getindex(X, 1) * getindex(X, 2))) + getindex(V, 1) / ((2 * getindex(X, 1)) * getindex(X, 2)) + ˍ₋out[2] = -1 * params.a₂ + (-1 * params.b₂) / getindex(X, 2) #= none:12 =# nothing end @@ -163,16 +163,16 @@ nothing end end -end), g = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :Λ, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x5dd8f1c1, 0x64ee23ef, 0x65d6e415, 0x93a2dcf0, 0xc9116c7a), Expr}(quote +end), g = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :Λ, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xc952f36d, 0x0b3274a1, 0x5a98bf60, 0x2329f298, 0x8174cb0d), Expr}(quote #= none:1 =# #= none:5 =# begin #= none:7 =# #= none:7 =# @inbounds begin #= none:9 =# - ˍ₋out[1] = getindex(V, 2) / ((2 * getindex(X, 1)) * getindex(X, 2)) + ((-1 // 2 * getindex(V, 1)) * log(getindex(X, 2))) / getindex(X, 1) ^ 2 + ˍ₋out[1] = (-1 // 2 * getindex(V, 2) + (-1 // 2 * getindex(V, 2)) * log(getindex(X, 1))) / (getindex(X, 1) * getindex(X, 2)) + (((-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) ^ 2 * getindex(X, 2)) #= none:10 =# - ˍ₋out[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)) + ˍ₋out[2] = (((-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) ^ 2) + (1 // 2 * getindex(V, 1) + (1 // 2 * getindex(V, 1)) * log(getindex(X, 2))) / (getindex(X, 1) * getindex(X, 2)) #= none:12 =# nothing end @@ -191,16 +191,16 @@ nothing end end -end), ḡ = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :Λ, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0xc952f36d, 0x0b3274a1, 0x5a98bf60, 0x2329f298, 0x8174cb0d), Expr}(quote +end), ḡ = RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :t, :X, :Λ, :V, :params), EulerLagrange.var"#_RGF_ModTag", EulerLagrange.var"#_RGF_ModTag", (0x5dd8f1c1, 0x64ee23ef, 0x65d6e415, 0x93a2dcf0, 0xc9116c7a), Expr}(quote #= none:1 =# #= none:5 =# begin #= none:7 =# #= none:7 =# @inbounds begin #= none:9 =# - ˍ₋out[1] = (-1 // 2 * getindex(V, 2) + (-1 // 2 * getindex(V, 2)) * log(getindex(X, 1))) / (getindex(X, 1) * getindex(X, 2)) + (((-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) ^ 2 * getindex(X, 2)) + ˍ₋out[1] = getindex(V, 2) / ((2 * getindex(X, 1)) * getindex(X, 2)) + ((-1 // 2 * getindex(V, 1)) * log(getindex(X, 2))) / getindex(X, 1) ^ 2 #= none:10 =# - ˍ₋out[2] = (((-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) ^ 2) + (1 // 2 * getindex(V, 1) + (1 // 2 * getindex(V, 1)) * log(getindex(X, 2))) / (getindex(X, 1) * getindex(X, 2)) + ˍ₋out[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)) #= none:12 =# nothing end @@ -291,4 +291,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 21fbed6..2f4c60d 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/harmonic-oscillator-hamiltonian.svg b/latest/harmonic-oscillator-hamiltonian.svg index 290ede5..479f9bc 100644 --- a/latest/harmonic-oscillator-hamiltonian.svg +++ b/latest/harmonic-oscillator-hamiltonian.svg @@ -2,102 +2,102 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -111,135 +111,135 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/latest/index.html b/latest/index.html index e60bcb3..073a069 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 d8c1ac1..d7868ff 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 9f69271..122a618 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 78e3b99..c56c8b8 100644 --- a/latest/objects.inv +++ b/latest/objects.inv @@ -1,6 +1,6 @@ # Sphinx inventory version 2 # Project: EulerLagrange.jl -# Version: 0.3.15 +# Version: 0.4.0 # The remainder of this file is compressed using zlib. xRN0+VZT DWu`p"$ˉL 7k33;Yms"w 5ʕ$ޱԆh8UV `38`3"zRNY' 㔪/BN7`>;xmG! - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -165,201 +165,201 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/latest/particle_vi_param.svg b/latest/particle_vi_param.svg index a15f556..4b55d39 100644 --- a/latest/particle_vi_param.svg +++ b/latest/particle_vi_param.svg @@ -2,188 +2,188 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -201,231 +201,231 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +