Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Linearization of improper (differentiating / inverse) models #3057

Open
B-LIE opened this issue Sep 19, 2024 · 1 comment
Open

Linearization of improper (differentiating / inverse) models #3057

B-LIE opened this issue Sep 19, 2024 · 1 comment
Labels
bug Something isn't working

Comments

@B-LIE
Copy link

B-LIE commented Sep 19, 2024

Describe the bug 🐞

Consider the well-known, academic "Four Tank" model. Simulation of the input-output (valve-signal to output levels, case = :io in MRE) works. Likewise, linearization (symbolic and numeric) of the input-output model works (case = :lin_io in MRE). Also simulation of the zero dynamics works (specifying the outputs; case = :zero in MRE).

HOWEVER, both symbolic and numeric linearization fails for the zero dynamics case (case = :lin_zero in MRE).

Expected behavior

Both symbolic and numeric linearization of the zero dynamics case (case = :lin_zero) should work. The eigenvalues of the zero dynamics system matrix should equal the transmission zeros of case = :lin_io.

Minimal Reproducible Example 👇

Here is my case, set up with both symbolic and numeric linearization of the zero dynamics.

# Packages
using ModelingToolkit
using ModelingToolkit: t_nounits as t, D_nounits as Dt
using DifferentialEquations
#
# Input functions
# -- control inputs
@register_symbolic u_u1(t)
@register_symbolic u_u2(t)
#
u_v_1(t) = 3.0
u_v_2(t) = 3.0
#
# -- output references
@register_symbolic u_r1(t)
@register_symbolic u_r2(t)
#
u_r_1(t) = 12.4*0.5
u_r_2(t) = 12.7*0.5
# 
# Model FourTank
@mtkmodel FourTank begin
    # Ref: Johansson, K.H. (2000): "The Quadruple-Tank Process: A Multivariable 
    #               Laboratory Process with an Adjustable Zero", 
    #               IEEE Trans. Ctrl. Tech., Vol. 8, No. 3, May 2000
    # Structure parameters
    @structural_parameters begin
        # :io = standard input-output, :zero = zero dynamics
        # :lin_io = linearizing input-output, :lin_zero = linearizing zero dynamics
        case = :io 
    end
    #
    # Model parameters
    @parameters begin
        # Constant 
        g = 981,            [description = "Acceleration of gravity, cm/s^2"]
        # Parameters
        # -- tank parameters
        A_1 = 28,           [description = "Tank 1, cross-section area, cm^2"]
        A_2 = 32,           [description = "Tank 2, cross-section area, cm^2"]
        A_3 = 28,           [description = "Tank 3, cross-section area, cm^2"]
        A_4 = 32,           [description = "Tank 4, cross-section area, cm^2"]
        a_1 = 0.071,        [description = "Tank 1, cross-section area of outlet hole, cm^2"]
        a_2 = 0.057,        [description = "Tank 2, cross-section area of outlet hole, cm^2"]
        a_3 = 0.071,        [description = "Tank 3, cross-section area of outlet hole, cm^2"]
        a_4 = 0.057,        [description = "Tank 4, cross-section area of outlet hole, cm^2"]
        # -- valve parameters, case of LHP zeros/stable zero dynamics
        γ_1 = 0.70,         [description = "Valve 1 split setting, -"]
        γ_2 = 0.60,         [description = "Valve 2 split setting, -"]
        k_1 = 3.33,         [description = "Valve 1 gain, cm3/V.s"]
        k_2 = 3.35,         [description = "Valve 2 gain, cm3/V.s"]
        # -- sensor parameter
        k_c = 0.5,          [description = "Sensor gain, V/cm"]
    end
    #
    # Model variables, with initial values needed
    @variables begin
        # Variables
        # -- states
        h_1(t)=12.4,        [description = "Tank 1 level, cm"]
        h_2(t)=12.7,        [description = "Tank 2 level, cm"]
        h_3(t)=1.8,         [description = "Tank 3 level, cm"]
        h_4(t)=1.4,         [description = "Tank 4 level, cm"]
        # -- sensor signals
        y_1(t),             [description = "Output 1: level in Tank 1, cm"]
        y_2(t),             [description = "Output 2: level in Tank 2, cm"]
        # -- actuator signals
        v_1(t),             [description = "Valve 1 signal, V"]
        v_2(t),             [description = "Valve 2 signal, V"]
    end
    #
    # Model equations
    @equations begin
        # ODEs
        Dt(h_1) ~ -a_1/A_1*sqrt(2g*h_1) + a_3/A_1*sqrt(2g*h_3) + γ_1*k_1/A_1*v_1
        Dt(h_2) ~ -a_2/A_2*sqrt(2g*h_2) + a_4/A_2*sqrt(2g*h_4) + γ_2*k_2/A_2*v_2
        Dt(h_3) ~ -a_3/A_3*sqrt(2g*h_3) + (1-γ_2)*k_2/A_3*v_2
        Dt(h_4) ~ -a_4/A_4*sqrt(2g*h_4) + (1-γ_1)*k_1/A_4*v_1
        # Outputs
        y_1 ~ k_c*h_1
        y_2 ~ k_c*h_2
        # Inputs
        if case == :io
            v_1 ~ u_v_1(t)
            v_2 ~ u_v_2(t)
        elseif case == :lin_io
            #v_1 ~ u_v_1(t)
            #v_2 ~ u_v_2(t)
        elseif case == :zero
            y_1 ~ u_r_1(t)
            y_2 ~ u_r_2(t)
        elseif case == :lin_zero
            #y_1 ~ u_r_1(t)
            #y_2 ~ u_r_2(t)
        end
    end
end
# 
# Instantiating case for linearizing zero dynamics
@named t4_LZ= FourTank(; case=:lin_zero)
t4_LZ= complete(t4_LZ)
# 
# Symbolic linearization -- gives error
mats,t4z_ = ModelingToolkit.linearize_symbolic(t4_LZ, [t4_LZ.y_1, t4_LZ.y_2], [t4_LZ.h_3, t4_LZ.h_4])
# 
# Numeric linearization -- gives error
mats,t4z_ = ModelingToolkit.linearize(t4_LZ, [t4_LZ.y_1, t4_LZ.y_2], [t4_LZ.h_3, t4_LZ.h_4];
                op=Dict(t4_LZ.y_1 => 6.2, t4_LZ.y_2 => 6.35))

Error & Stacktrace ⚠️
Case of symbolic linearization

BoundsError: attempt to access 1-element Vector{Any} at index [2]

Stacktrace:
 [1] getindex(A::Vector{Any}, i1::Int64)
   @ Base .\essentials.jl:13
 [2] expand_derivatives(O::SymbolicUtils.BasicSymbolic{Real}, simplify::Bool; occurrences::SymbolicUtils.BasicSymbolic{Real}) (repeats 5 times)
   @ Symbolics C:\Users\Bernt_Lie\.julia\packages\Symbolics\6WqId\src\diff.jl:257
 [3] expand_derivatives(O::SymbolicUtils.BasicSymbolic{Real}, simplify::Bool; occurrences::Nothing)
   @ Symbolics C:\Users\Bernt_Lie\.julia\packages\Symbolics\6WqId\src\diff.jl:257
 [4] expand_derivatives(O::SymbolicUtils.BasicSymbolic{Real}, simplify::Bool)
   @ Symbolics C:\Users\Bernt_Lie\.julia\packages\Symbolics\6WqId\src\diff.jl:183
 [5] jacobian(ops::Vector{SymbolicUtils.BasicSymbolic{Real}}, vars::Vector{Num}; simplify::Bool, scalarize::Bool)
   @ Symbolics C:\Users\Bernt_Lie\.julia\packages\Symbolics\6WqId\src\diff.jl:470
 [6] jacobian(ops::Vector{SymbolicUtils.BasicSymbolic{Real}}, vars::Vector{Num})
   @ Symbolics C:\Users\Bernt_Lie\.julia\packages\Symbolics\6WqId\src\diff.jl:465
 [7] linearize_symbolic(sys::ODESystem, inputs::Vector{Num}, outputs::Vector{Num}; simplify::Bool, allow_input_derivatives::Bool, eval_expression::Bool, eval_module::Module, kwargs::@Kwargs{})
   @ ModelingToolkit C:\Users\Bernt_Lie\.julia\packages\ModelingToolkit\UXr3S\src\systems\abstractsystem.jl:2454
 [8] linearize_symbolic(sys::ODESystem, inputs::Vector{Num}, outputs::Vector{Num})
   @ ModelingToolkit C:\Users\Bernt_Lie\.julia\packages\ModelingToolkit\UXr3S\src\systems\abstractsystem.jl:2434
 [9] top-level scope
   @ c:\Users\Bernt_Lie\OneDrive\Documents\researchUSN\Supervisor\PhD\Kushila_Jayamanne\Notebooks\jl_notebook_cell_df34fa98e69747e1a8f8a730347b8e2f_X36sZmlsZQ==.jl:1

Case of (numeric) linearization:

{
	"name": "ArgumentError",
	"message": "ArgumentError: Cannot convert Sym to Float64 since Sym is symbolic and Float64 is concrete. Use `substitute` to replace the symbolic unwraps.",
	"stack": "ArgumentError: Cannot convert Sym to Float64 since Sym is symbolic and Float64 is concrete. Use `substitute` to replace the symbolic unwraps.\n\nStacktrace:\n  [1] Float64(x::SymbolicUtils.BasicSymbolic{ForwardDiff.Dual{ForwardDiff.Tag{SciMLBase.UJacobianWrapper{true, ODEFunction{true, SciMLBase.FullSpecialize, ModelingToolkit.var\"#f#815\"{RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x68d7fc22, 0x9cd0330d, 0x51936f95, 0xda8a0357, 0xa6ac43de), Nothing}, RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x077ceea2, 0x254bf500, 0x74c8eda1, 0x54c835c5, 0x5d3dd8d7), Nothing}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, ModelingToolkit.ObservedFunctionCache{ODESystem}, Nothing, ODESystem, Nothing, Nothing}, Float64, MTKParameters{Vector{Float64}, Tuple{}, Tuple{}, Tuple{}}}, Float64}, Float64, 2}})\n    @ Symbolics C:\\Users\\Bernt_Lie\\.julia\\packages\\Symbolics\\6WqId\\src\\Symbolics.jl:171\n  [2] convert\n    @ C:\\Users\\Bernt_Lie\\.julia\\packages\\ForwardDiff\\PcZ48\\src\\dual.jl:435 [inlined]\n  [3] setindex!(A::Vector{ForwardDiff.Dual{ForwardDiff.Tag{SciMLBase.UJacobianWrapper{true, ODEFunction{true, SciMLBase.FullSpecialize, ModelingToolkit.var\"#f#815\"{RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x68d7fc22, 0x9cd0330d, 0x51936f95, 0xda8a0357, 0xa6ac43de), Nothing}, RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x077ceea2, 0x254bf500, 0x74c8eda1, 0x54c835c5, 0x5d3dd8d7), Nothing}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, ModelingToolkit.ObservedFunctionCache{ODESystem}, Nothing, ODESystem, Nothing, Nothing}, Float64, MTKParameters{Vector{Float64}, Tuple{}, Tuple{}, Tuple{}}}, Float64}, Float64, 2}}, x::SymbolicUtils.BasicSymbolic{ForwardDiff.Dual{ForwardDiff.Tag{SciMLBase.UJacobianWrapper{true, ODEFunction{true, SciMLBase.FullSpecialize, ModelingToolkit.var\"#f#815\"{RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x68d7fc22, 0x9cd0330d, 0x51936f95, 0xda8a0357, 0xa6ac43de), Nothing}, RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x077ceea2, 0x254bf500, 0x74c8eda1, 0x54c835c5, 0x5d3dd8d7), Nothing}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, ModelingToolkit.ObservedFunctionCache{ODESystem}, Nothing, ODESystem, Nothing, Nothing}, Float64, MTKParameters{Vector{Float64}, Tuple{}, Tuple{}, Tuple{}}}, Float64}, Float64, 2}}, i1::Int64)\n    @ Base .\\array.jl:1021\n  [4] macro expansion\n    @ C:\\Users\\Bernt_Lie\\.julia\\packages\\SymbolicUtils\\5UmB7\\src\\code.jl:430 [inlined]\n  [5] macro expansion\n    @ C:\\Users\\Bernt_Lie\\.julia\\packages\\Symbolics\\6WqId\\src\\build_function.jl:546 [inlined]\n  [6] macro expansion\n    @ C:\\Users\\Bernt_Lie\\.julia\\packages\\SymbolicUtils\\5UmB7\\src\\code.jl:387 [inlined]\n  [7] macro expansion\n    @ C:\\Users\\Bernt_Lie\\.julia\\packages\\RuntimeGeneratedFunctions\\M9ZX8\\src\\RuntimeGeneratedFunctions.jl:163 [inlined]\n  [8] macro expansion\n    @ .\\none:0 [inlined]\n  [9] generated_callfunc\n    @ .\\none:0 [inlined]\n [10] (::RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x077ceea2, 0x254bf500, 0x74c8eda1, 0x54c835c5, 0x5d3dd8d7), Nothing})(::Vector{ForwardDiff.Dual{ForwardDiff.Tag{SciMLBase.UJacobianWrapper{true, ODEFunction{true, SciMLBase.FullSpecialize, ModelingToolkit.var\"#f#815\"{RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x68d7fc22, 0x9cd0330d, 0x51936f95, 0xda8a0357, 0xa6ac43de), Nothing}, RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x077ceea2, 0x254bf500, 0x74c8eda1, 0x54c835c5, 0x5d3dd8d7), Nothing}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, ModelingToolkit.ObservedFunctionCache{ODESystem}, Nothing, ODESystem, Nothing, Nothing}, Float64, MTKParameters{Vector{Float64}, Tuple{}, Tuple{}, Tuple{}}}, Float64}, Float64, 2}}, ::Vector{ForwardDiff.Dual{ForwardDiff.Tag{SciMLBase.UJacobianWrapper{true, ODEFunction{true, SciMLBase.FullSpecialize, ModelingToolkit.var\"#f#815\"{RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x68d7fc22, 0x9cd0330d, 0x51936f95, 0xda8a0357, 0xa6ac43de), Nothing}, RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x077ceea2, 0x254bf500, 0x74c8eda1, 0x54c835c5, 0x5d3dd8d7), Nothing}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, ModelingToolkit.ObservedFunctionCache{ODESystem}, Nothing, ODESystem, Nothing, Nothing}, Float64, MTKParameters{Vector{Float64}, Tuple{}, Tuple{}, Tuple{}}}, Float64}, Float64, 2}}, ::Vector{Float64}, ::Float64)\n    @ RuntimeGeneratedFunctions C:\\Users\\Bernt_Lie\\.julia\\packages\\RuntimeGeneratedFunctions\\M9ZX8\\src\\RuntimeGeneratedFunctions.jl:150\n [11] f\n    @ C:\\Users\\Bernt_Lie\\.julia\\packages\\ModelingToolkit\\UXr3S\\src\\systems\\diffeqs\\abstractodesystem.jl:351 [inlined]\n [12] ODEFunction\n    @ C:\\Users\\Bernt_Lie\\.julia\\packages\\SciMLBase\\j8jQg\\src\\scimlfunctions.jl:2335 [inlined]\n [13] UJacobianWrapper\n    @ C:\\Users\\Bernt_Lie\\.julia\\packages\\SciMLBase\\j8jQg\\src\\function_wrappers.jl:34 [inlined]\n [14] vector_mode_dual_eval!\n    @ C:\\Users\\Bernt_Lie\\.julia\\packages\\ForwardDiff\\PcZ48\\src\\apiutils.jl:24 [inlined]\n [15] vector_mode_jacobian(f::SciMLBase.UJacobianWrapper{true, ODEFunction{true, SciMLBase.FullSpecialize, ModelingToolkit.var\"#f#815\"{RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x68d7fc22, 0x9cd0330d, 0x51936f95, 0xda8a0357, 0xa6ac43de), Nothing}, RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x077ceea2, 0x254bf500, 0x74c8eda1, 0x54c835c5, 0x5d3dd8d7), Nothing}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, ModelingToolkit.ObservedFunctionCache{ODESystem}, Nothing, ODESystem, Nothing, Nothing}, Float64, MTKParameters{Vector{Float64}, Tuple{}, Tuple{}, Tuple{}}}, x::Vector{Float64}, cfg::ForwardDiff.JacobianConfig{ForwardDiff.Tag{SciMLBase.UJacobianWrapper{true, ODEFunction{true, SciMLBase.FullSpecialize, ModelingToolkit.var\"#f#815\"{RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x68d7fc22, 0x9cd0330d, 0x51936f95, 0xda8a0357, 0xa6ac43de), Nothing}, RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x077ceea2, 0x254bf500, 0x74c8eda1, 0x54c835c5, 0x5d3dd8d7), Nothing}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, ModelingToolkit.ObservedFunctionCache{ODESystem}, Nothing, ODESystem, Nothing, Nothing}, Float64, MTKParameters{Vector{Float64}, Tuple{}, Tuple{}, Tuple{}}}, Float64}, Float64, 2, Vector{ForwardDiff.Dual{ForwardDiff.Tag{SciMLBase.UJacobianWrapper{true, ODEFunction{true, SciMLBase.FullSpecialize, ModelingToolkit.var\"#f#815\"{RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x68d7fc22, 0x9cd0330d, 0x51936f95, 0xda8a0357, 0xa6ac43de), Nothing}, RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x077ceea2, 0x254bf500, 0x74c8eda1, 0x54c835c5, 0x5d3dd8d7), Nothing}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, ModelingToolkit.ObservedFunctionCache{ODESystem}, Nothing, ODESystem, Nothing, Nothing}, Float64, MTKParameters{Vector{Float64}, Tuple{}, Tuple{}, Tuple{}}}, Float64}, Float64, 2}}})\n    @ ForwardDiff C:\\Users\\Bernt_Lie\\.julia\\packages\\ForwardDiff\\PcZ48\\src\\jacobian.jl:125\n [16] jacobian(f::Function, x::Vector{Float64}, cfg::ForwardDiff.JacobianConfig{ForwardDiff.Tag{SciMLBase.UJacobianWrapper{true, ODEFunction{true, SciMLBase.FullSpecialize, ModelingToolkit.var\"#f#815\"{RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x68d7fc22, 0x9cd0330d, 0x51936f95, 0xda8a0357, 0xa6ac43de), Nothing}, RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x077ceea2, 0x254bf500, 0x74c8eda1, 0x54c835c5, 0x5d3dd8d7), Nothing}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, ModelingToolkit.ObservedFunctionCache{ODESystem}, Nothing, ODESystem, Nothing, Nothing}, Float64, MTKParameters{Vector{Float64}, Tuple{}, Tuple{}, Tuple{}}}, Float64}, Float64, 2, Vector{ForwardDiff.Dual{ForwardDiff.Tag{SciMLBase.UJacobianWrapper{true, ODEFunction{true, SciMLBase.FullSpecialize, ModelingToolkit.var\"#f#815\"{RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x68d7fc22, 0x9cd0330d, 0x51936f95, 0xda8a0357, 0xa6ac43de), Nothing}, RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x077ceea2, 0x254bf500, 0x74c8eda1, 0x54c835c5, 0x5d3dd8d7), Nothing}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, ModelingToolkit.ObservedFunctionCache{ODESystem}, Nothing, ODESystem, Nothing, Nothing}, Float64, MTKParameters{Vector{Float64}, Tuple{}, Tuple{}, Tuple{}}}, Float64}, Float64, 2}}}, ::Val{true})\n    @ ForwardDiff C:\\Users\\Bernt_Lie\\.julia\\packages\\ForwardDiff\\PcZ48\\src\\jacobian.jl:21\n [17] jacobian(f::Function, x::Vector{Float64}, cfg::ForwardDiff.JacobianConfig{ForwardDiff.Tag{SciMLBase.UJacobianWrapper{true, ODEFunction{true, SciMLBase.FullSpecialize, ModelingToolkit.var\"#f#815\"{RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x68d7fc22, 0x9cd0330d, 0x51936f95, 0xda8a0357, 0xa6ac43de), Nothing}, RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x077ceea2, 0x254bf500, 0x74c8eda1, 0x54c835c5, 0x5d3dd8d7), Nothing}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, ModelingToolkit.ObservedFunctionCache{ODESystem}, Nothing, ODESystem, Nothing, Nothing}, Float64, MTKParameters{Vector{Float64}, Tuple{}, Tuple{}, Tuple{}}}, Float64}, Float64, 2, Vector{ForwardDiff.Dual{ForwardDiff.Tag{SciMLBase.UJacobianWrapper{true, ODEFunction{true, SciMLBase.FullSpecialize, ModelingToolkit.var\"#f#815\"{RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x68d7fc22, 0x9cd0330d, 0x51936f95, 0xda8a0357, 0xa6ac43de), Nothing}, RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x077ceea2, 0x254bf500, 0x74c8eda1, 0x54c835c5, 0x5d3dd8d7), Nothing}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, ModelingToolkit.ObservedFunctionCache{ODESystem}, Nothing, ODESystem, Nothing, Nothing}, Float64, MTKParameters{Vector{Float64}, Tuple{}, Tuple{}, Tuple{}}}, Float64}, Float64, 2}}})\n    @ ForwardDiff C:\\Users\\Bernt_Lie\\.julia\\packages\\ForwardDiff\\PcZ48\\src\\jacobian.jl:19\n [18] (::ModelingToolkit.var\"#358#367\"{UnitRange{Int64}, UnitRange{Int64}, Vector{ModelingToolkit.ParameterIndex{SciMLStructures.Tunable, Int64}}, Vector{SymbolicUtils.BasicSymbolic{Real}}, ModelingToolkit.var\"#356#364\"{MTKParameters{Vector{Float64}, Tuple{}, Tuple{}, Tuple{}}, RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(Symbol(\"##arg#10936873250485650685\"), Symbol(\"##arg#12853417078996959593\"), :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0xdb453d6f, 0x8ce078e3, 0xf0a30935, 0x139cbd07, 0xbba648b8), Nothing}, SymbolicIndexingInterface.ParameterHookWrapper{SymbolicIndexingInterface.MultipleSetters{Vector{SymbolicIndexingInterface.SetParameterIndex{ModelingToolkit.ParameterIndex{SciMLStructures.Tunable, Int64}}}}, Vector{SymbolicUtils.BasicSymbolic{Real}}}, ModelingToolkit.var\"#355#363\"}, ODEFunction{true, SciMLBase.FullSpecialize, ModelingToolkit.var\"#f#815\"{RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x68d7fc22, 0x9cd0330d, 0x51936f95, 0xda8a0357, 0xa6ac43de), Nothing}, RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x077ceea2, 0x254bf500, 0x74c8eda1, 0x54c835c5, 0x5d3dd8d7), Nothing}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, ModelingToolkit.ObservedFunctionCache{ODESystem}, Nothing, ODESystem, Nothing, Nothing}, NonlinearFunction{true, SciMLBase.FullSpecialize, ModelingToolkit.var\"#f#648\"{RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋arg1, :ˍ₋arg2), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x11ce7c29, 0x6f65c7e8, 0x0fb6ac7c, 0x343656a1, 0xca307b6b), Nothing}, RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :ˍ₋arg1, :ˍ₋arg2), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x58b56277, 0x73127dde, 0x68c0af47, 0x517d1f4b, 0x707f7aca), Nothing}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, ModelingToolkit.ObservedFunctionCache{NonlinearSystem}, Nothing, NonlinearSystem, Vector{Float64}}, ModelingToolkit.var\"#fn#366\"{RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(Symbol(\"##arg#5964805160111424296\"), Symbol(\"##arg#9353732160355970344\")), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x6579d8b3, 0x45aaa53d, 0xc45bd7e9, 0xae240d39, 0xf23e180a), Nothing}}, RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(Symbol(\"##arg#10936873250485650685\"), Symbol(\"##arg#12853417078996959593\"), :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0xbcec8039, 0xc13893b9, 0xe9fd9bf0, 0xd326ed21, 0x0dd80d24), Nothing}, ForwardDiff.Chunk{2}, MTKParameters{Vector{Float64}, Tuple{}, Tuple{}, Tuple{}}, Bool, GeneralizedFirstOrderAlgorithm{nothing, :TrustRegion, Missing, NonlinearSolve.GenericTrustRegionScheme{NonlinearSolve.RadiusUpdateSchemes.__Simple, Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}, Nothing, Nothing, Nothing, Nothing}, Dogleg{NewtonDescent{Nothing, typeof(NonlinearSolve.DEFAULT_PRECS)}, SteepestDescent{Nothing, typeof(NonlinearSolve.DEFAULT_PRECS)}}, Nothing, Nothing, Nothing}, ODESystem})(u::Vector{Float64}, p::Dict{Num, Float64}, t::Float64)\n    @ ModelingToolkit C:\\Users\\Bernt_Lie\\.julia\\packages\\ModelingToolkit\\UXr3S\\src\\systems\\abstractsystem.jl:2383\n [19] linearize(sys::ODESystem, lin_fun::ModelingToolkit.var\"#358#367\"{UnitRange{Int64}, UnitRange{Int64}, Vector{ModelingToolkit.ParameterIndex{SciMLStructures.Tunable, Int64}}, Vector{SymbolicUtils.BasicSymbolic{Real}}, ModelingToolkit.var\"#356#364\"{MTKParameters{Vector{Float64}, Tuple{}, Tuple{}, Tuple{}}, RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(Symbol(\"##arg#10936873250485650685\"), Symbol(\"##arg#12853417078996959593\"), :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0xdb453d6f, 0x8ce078e3, 0xf0a30935, 0x139cbd07, 0xbba648b8), Nothing}, SymbolicIndexingInterface.ParameterHookWrapper{SymbolicIndexingInterface.MultipleSetters{Vector{SymbolicIndexingInterface.SetParameterIndex{ModelingToolkit.ParameterIndex{SciMLStructures.Tunable, Int64}}}}, Vector{SymbolicUtils.BasicSymbolic{Real}}}, ModelingToolkit.var\"#355#363\"}, ODEFunction{true, SciMLBase.FullSpecialize, ModelingToolkit.var\"#f#815\"{RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x68d7fc22, 0x9cd0330d, 0x51936f95, 0xda8a0357, 0xa6ac43de), Nothing}, RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :ˍ₋arg1, :ˍ₋arg2, :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x077ceea2, 0x254bf500, 0x74c8eda1, 0x54c835c5, 0x5d3dd8d7), Nothing}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, ModelingToolkit.ObservedFunctionCache{ODESystem}, Nothing, ODESystem, Nothing, Nothing}, NonlinearFunction{true, SciMLBase.FullSpecialize, ModelingToolkit.var\"#f#648\"{RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋arg1, :ˍ₋arg2), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x11ce7c29, 0x6f65c7e8, 0x0fb6ac7c, 0x343656a1, 0xca307b6b), Nothing}, RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(:ˍ₋out, :ˍ₋arg1, :ˍ₋arg2), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x58b56277, 0x73127dde, 0x68c0af47, 0x517d1f4b, 0x707f7aca), Nothing}}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, ModelingToolkit.ObservedFunctionCache{NonlinearSystem}, Nothing, NonlinearSystem, Vector{Float64}}, ModelingToolkit.var\"#fn#366\"{RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(Symbol(\"##arg#5964805160111424296\"), Symbol(\"##arg#9353732160355970344\")), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0x6579d8b3, 0x45aaa53d, 0xc45bd7e9, 0xae240d39, 0xf23e180a), Nothing}}, RuntimeGeneratedFunctions.RuntimeGeneratedFunction{(Symbol(\"##arg#10936873250485650685\"), Symbol(\"##arg#12853417078996959593\"), :t), ModelingToolkit.var\"#_RGF_ModTag\", ModelingToolkit.var\"#_RGF_ModTag\", (0xbcec8039, 0xc13893b9, 0xe9fd9bf0, 0xd326ed21, 0x0dd80d24), Nothing}, ForwardDiff.Chunk{2}, MTKParameters{Vector{Float64}, Tuple{}, Tuple{}, Tuple{}}, Bool, GeneralizedFirstOrderAlgorithm{nothing, :TrustRegion, Missing, NonlinearSolve.GenericTrustRegionScheme{NonlinearSolve.RadiusUpdateSchemes.__Simple, Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}, Rational{Int64}, Nothing, Nothing, Nothing, Nothing}, Dogleg{NewtonDescent{Nothing, typeof(NonlinearSolve.DEFAULT_PRECS)}, SteepestDescent{Nothing, typeof(NonlinearSolve.DEFAULT_PRECS)}}, Nothing, Nothing, Nothing}, ODESystem}; t::Float64, op::Dict{Num, Float64}, allow_input_derivatives::Bool, p::SciMLBase.NullParameters)\n    @ ModelingToolkit C:\\Users\\Bernt_Lie\\.julia\\packages\\ModelingToolkit\\UXr3S\\src\\systems\\abstractsystem.jl:2657\n [20] linearize(sys::ODESystem, inputs::Vector{Num}, outputs::Vector{Num}; op::Dict{Num, Float64}, t::Float64, allow_input_derivatives::Bool, zero_dummy_der::Bool, kwargs::@Kwargs{})\n    @ ModelingToolkit C:\\Users\\Bernt_Lie\\.julia\\packages\\ModelingToolkit\\UXr3S\\src\\systems\\abstractsystem.jl:2708\n [21] top-level scope\n    @ c:\\Users\\Bernt_Lie\\OneDrive\\Documents\\researchUSN\\Supervisor\\PhD\\Kushila_Jayamanne\\Notebooks\\jl_notebook_cell_df34fa98e69747e1a8f8a730347b8e2f_X24sZmlsZQ==.jl:1"
}

Environment (please complete the following information):

  • Output of using Pkg; Pkg.status()
Status `C:\Users\Bernt_Lie\.julia\environments\v1.10\Project.toml`
  [6e4b80f9] BenchmarkTools v1.5.0
  [336ed68f] CSV v0.10.14
  [a6e380b2] ControlSystems v1.10.4
  [687d7614] ControlSystemsMTK v2.2.1
  [a93c6f00] DataFrames v1.6.1
  [82cc6244] DataInterpolations v6.4.0
  [0c46a032] DifferentialEquations v7.14.0
  [b964fa9f] LaTeXStrings v1.3.1
  [23fbe1c1] Latexify v0.16.5
  [2fda8390] LsqFit v0.15.0
  [add582a8] MLJ v0.20.7
  [961ee093] ModelingToolkit v9.40.0
  [16a59e39] ModelingToolkitStandardLibrary v2.12.0
  [0987c9cc] MonteCarloMeasurements v1.2.1
  [8913a72c] NonlinearSolve v3.14.0
  [6fe1bfb0] OffsetArrays v1.14.1
  [429524aa] Optim v1.9.4
  [91a5bcdd] Plots v1.40.8
  [98d1487c] PolyesterForwardDiff v0.1.2
  [f27b6e38] Polynomials v4.0.11
  [0c5d862f] Symbolics v6.11.0
  [37e2e46d] LinearAlgebra
  • Output of using Pkg; Pkg.status(; mode = PKGMODE_MANIFEST)
�[32m�[1mStatus�[22m�[39m `C:\Users\Bernt_Lie\.julia\environments\v1.10\Manifest.toml`
  �[90m[47edcb42] �[39mADTypes v1.8.0
  �[90m[da404889] �[39mARFFFiles v1.4.1
  �[90m[621f4979] �[39mAbstractFFTs v1.5.0
  �[90m[1520ce14] �[39mAbstractTrees v0.4.5
  �[90m[7d9f7c33] �[39mAccessors v0.1.38
  �[90m[79e6a3ab] �[39mAdapt v4.0.4
  �[90m[66dad0bd] �[39mAliasTables v1.1.3
  �[90m[dce04be8] �[39mArgCheck v2.3.0
  �[90m[ec485272] �[39mArnoldiMethod v0.4.0
  �[90m[4fba245c] �[39mArrayInterface v7.16.0
  �[90m[4c555306] �[39mArrayLayouts v1.10.3
  �[90m[a9b6321e] �[39mAtomix v0.1.0
  �[90m[aae01518] �[39mBandedMatrices v1.7.5
�[33m⌅�[39m �[90m[198e06fe] �[39mBangBang v0.3.40
  �[90m[9718e550] �[39mBaselet v0.1.1
  �[90m[6e4b80f9] �[39mBenchmarkTools v1.5.0
  �[90m[e2ed5e7c] �[39mBijections v0.1.9
  �[90m[d1d4a3ce] �[39mBitFlags v0.1.9
  �[90m[62783981] �[39mBitTwiddlingConvenienceFunctions v0.1.6
  �[90m[8e7c35d0] �[39mBlockArrays v1.1.1
  �[90m[764a87c0] �[39mBoundaryValueDiffEq v5.10.0
  �[90m[fa961155] �[39mCEnum v0.5.0
  �[90m[2a0fbf3d] �[39mCPUSummary v0.2.6
  �[90m[00ebfdb7] �[39mCSTParser v3.4.3
  �[90m[336ed68f] �[39mCSV v0.10.14
  �[90m[324d7699] �[39mCategoricalArrays v0.10.8
  �[90m[af321ab8] �[39mCategoricalDistributions v0.1.15
  �[90m[d360d2e6] �[39mChainRulesCore v1.25.0
  �[90m[fb6a15b2] �[39mCloseOpenIntervals v0.1.13
  �[90m[944b1d66] �[39mCodecZlib v0.7.6
  �[90m[35d6a980] �[39mColorSchemes v3.26.0
  �[90m[3da002f7] �[39mColorTypes v0.11.5
  �[90m[c3611d14] �[39mColorVectorSpace v0.10.0
  �[90m[5ae59095] �[39mColors v0.12.11
  �[90m[861a8166] �[39mCombinatorics v1.0.2
  �[90m[a80b9123] �[39mCommonMark v0.8.12
  �[90m[38540f10] �[39mCommonSolve v0.2.4
  �[90m[bbf7d656] �[39mCommonSubexpressions v0.3.1
  �[90m[f70d9fcc] �[39mCommonWorldInvalidations v1.0.0
  �[90m[34da2185] �[39mCompat v4.16.0
  �[90m[b0b7db55] �[39mComponentArrays v0.15.17
  �[90m[b152e2b5] �[39mCompositeTypes v0.1.4
  �[90m[a33af91c] �[39mCompositionsBase v0.1.2
  �[90m[ed09eef8] �[39mComputationalResources v0.3.2
  �[90m[2569d6c7] �[39mConcreteStructs v0.2.3
  �[90m[f0e56b4a] �[39mConcurrentUtilities v2.4.2
  �[90m[187b0558] �[39mConstructionBase v1.5.8
  �[90m[6add18c4] �[39mContextVariablesX v0.1.3
  �[90m[d38c429a] �[39mContour v0.6.3
  �[90m[a6e380b2] �[39mControlSystems v1.10.4
  �[90m[aaaaaaaa] �[39mControlSystemsBase v1.10.3
  �[90m[687d7614] �[39mControlSystemsMTK v2.2.1
  �[90m[adafc99b] �[39mCpuId v0.3.1
  �[90m[a8cc5b0e] �[39mCrayons v4.1.1
  �[90m[717857b8] �[39mDSP v0.7.9
  �[90m[9a962f9c] �[39mDataAPI v1.16.0
  �[90m[a93c6f00] �[39mDataFrames v1.6.1
  �[90m[82cc6244] �[39mDataInterpolations v6.4.0
  �[90m[864edb3b] �[39mDataStructures v0.18.20
  �[90m[e2d170a0] �[39mDataValueInterfaces v1.0.0
  �[90m[244e2a9f] �[39mDefineSingletons v0.1.2
  �[90m[bcd4f6db] �[39mDelayDiffEq v5.48.1
  �[90m[8bb1440f] �[39mDelimitedFiles v1.9.1
  �[90m[a81e2ce2] �[39mDescriptorSystems v1.4.4
  �[90m[2b5f629d] �[39mDiffEqBase v6.155.1
  �[90m[459566f4] �[39mDiffEqCallbacks v3.9.1
  �[90m[77a26b50] �[39mDiffEqNoiseProcess v5.23.0
  �[90m[163ba53b] �[39mDiffResults v1.1.0
  �[90m[b552c78f] �[39mDiffRules v1.15.1
  �[90m[0c46a032] �[39mDifferentialEquations v7.14.0
  �[90m[a0c0ee7d] �[39mDifferentiationInterface v0.5.17
  �[90m[8d63f2c5] �[39mDispatchDoctor v0.4.14
  �[90m[b4f34e82] �[39mDistances v0.10.11
  �[90m[31c24e10] �[39mDistributions v0.25.111
  �[90m[ffbed154] �[39mDocStringExtensions v0.9.3
  �[90m[5b8099bc] �[39mDomainSets v0.7.14
  �[90m[7c1d4256] �[39mDynamicPolynomials v0.6.0
  �[90m[06fc5a27] �[39mDynamicQuantities v1.0.0
  �[90m[792122b4] �[39mEarlyStopping v0.3.0
  �[90m[4e289a0a] �[39mEnumX v1.0.4
  �[90m[f151be2c] �[39mEnzymeCore v0.7.8
  �[90m[460bff9d] �[39mExceptionUnwrapping v0.1.10
  �[90m[d4d017d3] �[39mExponentialUtilities v1.26.1
  �[90m[e2ba6199] �[39mExprTools v0.1.10
�[33m⌅�[39m �[90m[6b7a57c9] �[39mExpronicon v0.8.5
  �[90m[c87230d0] �[39mFFMPEG v0.4.1
  �[90m[7a1cc6ca] �[39mFFTW v1.8.0
  �[90m[cc61a311] �[39mFLoops v0.2.2
  �[90m[b9860ae5] �[39mFLoopsBase v0.1.1
  �[90m[9d29842c] �[39mFastAlmostBandedMatrices v0.1.3
  �[90m[7034ab61] �[39mFastBroadcast v0.3.5
  �[90m[9aa1b823] �[39mFastClosures v0.3.2
  �[90m[29a986be] �[39mFastLapackInterface v2.0.4
  �[90m[33837fe5] �[39mFeatureSelection v0.2.2
  �[90m[48062228] �[39mFilePathsBase v0.9.22
  �[90m[1a297f60] �[39mFillArrays v1.13.0
  �[90m[64ca27bc] �[39mFindFirstFunctions v1.4.1
  �[90m[6a86dc24] �[39mFiniteDiff v2.24.0
  �[90m[53c48c17] �[39mFixedPointNumbers v0.8.5
  �[90m[1fa38f19] �[39mFormat v1.3.7
  �[90m[f6369f11] �[39mForwardDiff v0.10.36
  �[90m[069b7b12] �[39mFunctionWrappers v1.1.3
  �[90m[77dc65aa] �[39mFunctionWrappersWrappers v0.1.3
  �[90m[d9f16b24] �[39mFunctors v0.4.12
  �[90m[46192b85] �[39mGPUArraysCore v0.1.6
  �[90m[28b8d3ca] �[39mGR v0.73.7
  �[90m[c145ed77] �[39mGenericSchur v0.5.4
  �[90m[c27321d9] �[39mGlob v1.3.1
  �[90m[86223c79] �[39mGraphs v1.11.2
  �[90m[42e2da0e] �[39mGrisu v1.0.2
  �[90m[cd3eb016] �[39mHTTP v1.10.8
  �[90m[3e5b6fbb] �[39mHostCPUFeatures v0.1.17
  �[90m[e91730f6] �[39mHungarian v0.7.0
  �[90m[34004b35] �[39mHypergeometricFunctions v0.3.24
  �[90m[615f187c] �[39mIfElse v0.1.1
  �[90m[d25df0c9] �[39mInflate v0.1.5
  �[90m[22cec73e] �[39mInitialValues v0.3.1
  �[90m[842dd82b] �[39mInlineStrings v1.4.2
  �[90m[18e54dd8] �[39mIntegerMathUtils v0.1.2
  �[90m[8197267c] �[39mIntervalSets v0.7.10
  �[90m[3587e190] �[39mInverseFunctions v0.1.16
  �[90m[41ab1584] �[39mInvertedIndices v1.3.0
  �[90m[92d709cd] �[39mIrrationalConstants v0.2.2
  �[90m[c8e1da08] �[39mIterTools v1.10.0
  �[90m[b3c1a2ee] �[39mIterationControl v0.5.4
  �[90m[82899510] �[39mIteratorInterfaceExtensions v1.0.0
  �[90m[1019f520] �[39mJLFzf v0.1.8
  �[90m[692b3bcd] �[39mJLLWrappers v1.6.0
  �[90m[682c06a0] �[39mJSON v0.21.4
  �[90m[98e50ef6] �[39mJuliaFormatter v1.0.60
  �[90m[b14d175d] �[39mJuliaVariables v0.2.4
  �[90m[ccbc3e58] �[39mJumpProcesses v9.13.7
  �[90m[ef3ab10e] �[39mKLU v0.6.0
  �[90m[63c18a36] �[39mKernelAbstractions v0.9.26
  �[90m[ba0b0d4f] �[39mKrylov v0.9.6
  �[90m[929cbde3] �[39mLLVM v9.1.2
  �[90m[b964fa9f] �[39mLaTeXStrings v1.3.1
  �[90m[984bce1d] �[39mLambertW v0.4.6
  �[90m[23fbe1c1] �[39mLatexify v0.16.5
  �[90m[a5e1c1ea] �[39mLatinHypercubeSampling v1.9.0
  �[90m[10f19ff3] �[39mLayoutPointers v0.1.17
  �[90m[5078a376] �[39mLazyArrays v2.2.1
  �[90m[92ad9a40] �[39mLearnAPI v0.1.0
  �[90m[2d8b4e74] �[39mLevyArea v1.0.0
  �[90m[d3d80556] �[39mLineSearches v7.3.0
  �[90m[7a12625a] �[39mLinearMaps v3.11.3
  �[90m[7ed4a6bd] �[39mLinearSolve v2.34.0
  �[90m[2ab3a3ac] �[39mLogExpFunctions v0.3.28
  �[90m[e6f89c97] �[39mLoggingExtras v1.0.3
  �[90m[bdcacae8] �[39mLoopVectorization v0.12.171
  �[90m[2fda8390] �[39mLsqFit v0.15.0
  �[90m[64a0f543] �[39mMLFlowClient v0.5.1
  �[90m[add582a8] �[39mMLJ v0.20.7
  �[90m[45f359ea] �[39mMLJBalancing v0.1.5
  �[90m[a7f614a8] �[39mMLJBase v1.7.0
  �[90m[50ed68f4] �[39mMLJEnsembles v0.4.3
  �[90m[7b7b8358] �[39mMLJFlow v0.5.0
  �[90m[614be32b] �[39mMLJIteration v0.6.3
  �[90m[e80e1ace] �[39mMLJModelInterface v1.11.0
  �[90m[d491faf4] �[39mMLJModels v0.17.4
  �[90m[03970b2e] �[39mMLJTuning v0.8.8
  �[90m[d8e11817] �[39mMLStyle v0.4.17
  �[90m[f1d291b0] �[39mMLUtils v0.4.4
  �[90m[1914dd2f] �[39mMacroTools v0.5.13
  �[90m[d125e4d3] �[39mManualMemory v0.1.8
  �[90m[99c1a7ee] �[39mMatrixEquations v2.4.2
  �[90m[a3b82374] �[39mMatrixFactorizations v3.0.1
  �[90m[48965c70] �[39mMatrixPencils v1.8.0
  �[90m[bb5d69b7] �[39mMaybeInplace v0.1.4
  �[90m[739be429] �[39mMbedTLS v1.1.9
  �[90m[442fdcdd] �[39mMeasures v0.3.2
�[33m⌅�[39m �[90m[128add7d] �[39mMicroCollections v0.1.4
  �[90m[e1d29d7a] �[39mMissings v1.2.0
  �[90m[961ee093] �[39mModelingToolkit v9.40.0
  �[90m[16a59e39] �[39mModelingToolkitStandardLibrary v2.12.0
  �[90m[0987c9cc] �[39mMonteCarloMeasurements v1.2.1
  �[90m[46d2c3a1] �[39mMuladdMacro v0.2.4
  �[90m[102ac46a] �[39mMultivariatePolynomials v0.5.6
  �[90m[d8a4904e] �[39mMutableArithmetics v1.4.6
  �[90m[d41bc354] �[39mNLSolversBase v7.8.3
  �[90m[2774e3e8] �[39mNLsolve v4.5.1
  �[90m[872c559c] �[39mNNlib v0.9.23
  �[90m[77ba4419] �[39mNaNMath v1.0.2
  �[90m[71a1bf82] �[39mNameResolution v0.1.5
  �[90m[8913a72c] �[39mNonlinearSolve v3.14.0
  �[90m[6fe1bfb0] �[39mOffsetArrays v1.14.1
  �[90m[8b6db2d4] �[39mOpenML v0.3.1
  �[90m[4d8831e6] �[39mOpenSSL v1.4.3
  �[90m[429524aa] �[39mOptim v1.9.4
  �[90m[bac558e1] �[39mOrderedCollections v1.6.3
  �[90m[1dea7af3] �[39mOrdinaryDiffEq v6.89.0
  �[90m[89bda076] �[39mOrdinaryDiffEqAdamsBashforthMoulton v1.1.0
  �[90m[6ad6398a] �[39mOrdinaryDiffEqBDF v1.1.2
  �[90m[bbf590c4] �[39mOrdinaryDiffEqCore v1.6.0
  �[90m[50262376] �[39mOrdinaryDiffEqDefault v1.1.0
  �[90m[4302a76b] �[39mOrdinaryDiffEqDifferentiation v1.1.0
  �[90m[9286f039] �[39mOrdinaryDiffEqExplicitRK v1.1.0
  �[90m[e0540318] �[39mOrdinaryDiffEqExponentialRK v1.1.0
  �[90m[becaefa8] �[39mOrdinaryDiffEqExtrapolation v1.1.0
  �[90m[5960d6e9] �[39mOrdinaryDiffEqFIRK v1.1.1
  �[90m[101fe9f7] �[39mOrdinaryDiffEqFeagin v1.1.0
  �[90m[d3585ca7] �[39mOrdinaryDiffEqFunctionMap v1.1.1
  �[90m[d28bc4f8] �[39mOrdinaryDiffEqHighOrderRK v1.1.0
  �[90m[9f002381] �[39mOrdinaryDiffEqIMEXMultistep v1.1.0
  �[90m[521117fe] �[39mOrdinaryDiffEqLinear v1.1.0
  �[90m[1344f307] �[39mOrdinaryDiffEqLowOrderRK v1.2.0
  �[90m[b0944070] �[39mOrdinaryDiffEqLowStorageRK v1.2.1
  �[90m[127b3ac7] �[39mOrdinaryDiffEqNonlinearSolve v1.2.1
  �[90m[c9986a66] �[39mOrdinaryDiffEqNordsieck v1.1.0
  �[90m[5dd0a6cf] �[39mOrdinaryDiffEqPDIRK v1.1.0
  �[90m[5b33eab2] �[39mOrdinaryDiffEqPRK v1.1.0
  �[90m[04162be5] �[39mOrdinaryDiffEqQPRK v1.1.0
  �[90m[af6ede74] �[39mOrdinaryDiffEqRKN v1.1.0
  �[90m[43230ef6] �[39mOrdinaryDiffEqRosenbrock v1.2.0
  �[90m[2d112036] �[39mOrdinaryDiffEqSDIRK v1.1.0
  �[90m[669c94d9] �[39mOrdinaryDiffEqSSPRK v1.2.0
  �[90m[e3e12d00] �[39mOrdinaryDiffEqStabilizedIRK v1.1.0
  �[90m[358294b1] �[39mOrdinaryDiffEqStabilizedRK v1.1.0
  �[90m[fa646aed] �[39mOrdinaryDiffEqSymplecticRK v1.1.0
  �[90m[b1df2697] �[39mOrdinaryDiffEqTsit5 v1.1.0
  �[90m[79d7bb75] �[39mOrdinaryDiffEqVerner v1.1.1
  �[90m[90014a1f] �[39mPDMats v0.11.31
  �[90m[65ce6f38] �[39mPackageExtensionCompat v1.0.2
  �[90m[d96e819e] �[39mParameters v0.12.3
  �[90m[69de0a69] �[39mParsers v2.8.1
  �[90m[b98c9c47] �[39mPipe v1.3.0
  �[90m[ccf2f8ad] �[39mPlotThemes v3.2.0
  �[90m[995b91a9] �[39mPlotUtils v1.4.1
  �[90m[91a5bcdd] �[39mPlots v1.40.8
  �[90m[e409e4f3] �[39mPoissonRandom v0.4.4
  �[90m[f517fe37] �[39mPolyester v0.7.16
  �[90m[98d1487c] �[39mPolyesterForwardDiff v0.1.2
  �[90m[1d0040c9] �[39mPolyesterWeave v0.2.2
  �[90m[f27b6e38] �[39mPolynomials v4.0.11
  �[90m[2dfb63ee] �[39mPooledArrays v1.4.3
  �[90m[85a6dd25] �[39mPositiveFactorizations v0.2.4
  �[90m[d236fae5] �[39mPreallocationTools v0.4.24
  �[90m[aea7be01] �[39mPrecompileTools v1.2.1
  �[90m[21216c6a] �[39mPreferences v1.4.3
  �[90m[8162dcfd] �[39mPrettyPrint v0.2.0
  �[90m[54e16d92] �[39mPrettyPrinting v0.4.2
  �[90m[08abe8d2] �[39mPrettyTables v2.3.2
  �[90m[27ebfcd6] �[39mPrimes v0.5.6
  �[90m[92933f4c] �[39mProgressMeter v1.10.2
  �[90m[43287f4e] �[39mPtrArrays v1.2.1
  �[90m[1fd47b50] �[39mQuadGK v2.11.0
  �[90m[74087812] �[39mRandom123 v1.7.0
  �[90m[e6cf234a] �[39mRandomNumbers v1.6.0
  �[90m[3cdcf5f2] �[39mRecipesBase v1.3.4
  �[90m[01d81517] �[39mRecipesPipeline v0.6.12
  �[90m[731186ca] �[39mRecursiveArrayTools v3.27.0
  �[90m[f2c3362d] �[39mRecursiveFactorization v0.2.23
  �[90m[189a3867] �[39mReexport v1.2.2
  �[90m[05181044] �[39mRelocatableFolders v1.0.1
  �[90m[ae029012] �[39mRequires v1.3.0
  �[90m[ae5879a3] �[39mResettableStacks v1.1.1
  �[90m[79098fc4] �[39mRmath v0.8.0
  �[90m[21fd56a4] �[39mRobustAndOptimalControl v0.4.31
  �[90m[7e49a35a] �[39mRuntimeGeneratedFunctions v0.5.13
  �[90m[94e857df] �[39mSIMDTypes v0.1.0
  �[90m[476501e8] �[39mSLEEFPirates v0.6.43
  �[90m[0bca4576] �[39mSciMLBase v2.53.1
  �[90m[c0aeaf25] �[39mSciMLOperators v0.3.10
  �[90m[53ae85a6] �[39mSciMLStructures v1.5.0
  �[90m[321657f4] �[39mScientificTypes v3.0.2
  �[90m[30f210dd] �[39mScientificTypesBase v3.0.0
  �[90m[6c6a2e73] �[39mScratch v1.2.1
  �[90m[91c51154] �[39mSentinelArrays v1.4.5
  �[90m[efcf1570] �[39mSetfield v1.1.1
  �[90m[605ecd9f] �[39mShowCases v0.1.0
  �[90m[992d4aef] �[39mShowoff v1.0.3
  �[90m[777ac1f9] �[39mSimpleBufferStream v1.1.0
  �[90m[727e6d20] �[39mSimpleNonlinearSolve v1.12.1
  �[90m[699a6c99] �[39mSimpleTraits v0.9.4
  �[90m[ce78b400] �[39mSimpleUnPack v1.1.0
  �[90m[a2af1166] �[39mSortingAlgorithms v1.2.1
  �[90m[47a9eef4] �[39mSparseDiffTools v2.20.0
  �[90m[0a514795] �[39mSparseMatrixColorings v0.4.0
  �[90m[e56a9233] �[39mSparspak v0.3.9
  �[90m[276daf66] �[39mSpecialFunctions v2.4.0
  �[90m[171d559e] �[39mSplittablesBase v0.1.15
  �[90m[860ef19b] �[39mStableRNGs v1.0.2
  �[90m[aedffcd0] �[39mStatic v1.1.1
  �[90m[0d7ed370] �[39mStaticArrayInterface v1.8.0
  �[90m[90137ffa] �[39mStaticArrays v1.9.7
  �[90m[1e83bf80] �[39mStaticArraysCore v1.4.3
  �[90m[a19d573c] �[39mStatisticalMeasures v0.1.6
  �[90m[c062fc1d] �[39mStatisticalMeasuresBase v0.1.1
  �[90m[64bff920] �[39mStatisticalTraits v3.4.0
  �[90m[82ae8749] �[39mStatsAPI v1.7.0
  �[90m[2913bbd2] �[39mStatsBase v0.34.3
  �[90m[4c63d2b9] �[39mStatsFuns v1.3.2
  �[90m[9672c7b4] �[39mSteadyStateDiffEq v2.4.0
  �[90m[789caeaf] �[39mStochasticDiffEq v6.69.0
  �[90m[7792a7ef] �[39mStrideArraysCore v0.5.7
  �[90m[892a3eda] �[39mStringManipulation v0.3.4
  �[90m[c3572dad] �[39mSundials v4.25.0
  �[90m[2efcf032] �[39mSymbolicIndexingInterface v0.3.30
  �[90m[19f23fe9] �[39mSymbolicLimits v0.2.2
  �[90m[d1185830] �[39mSymbolicUtils v3.7.0
  �[90m[0c5d862f] �[39mSymbolics v6.11.0
  �[90m[3783bdb8] �[39mTableTraits v1.0.1
  �[90m[bd369af6] �[39mTables v1.12.0
  �[90m[62fd8b95] �[39mTensorCore v0.1.1
  �[90m[8ea1fca8] �[39mTermInterface v2.0.0
  �[90m[1c621080] �[39mTestItems v1.0.0
  �[90m[8290d209] �[39mThreadingUtilities v0.5.2
  �[90m[a759f4b9] �[39mTimerOutputs v0.5.24
  �[90m[0796e94c] �[39mTokenize v0.5.29
  �[90m[3bb67fe8] �[39mTranscodingStreams v0.11.2
�[32m⌃�[39m �[90m[28d57a85] �[39mTransducers v0.4.80
  �[90m[d5829a12] �[39mTriangularSolve v0.2.1
  �[90m[410a4b4d] �[39mTricks v0.1.9
  �[90m[781d530d] �[39mTruncatedStacktraces v1.4.0
  �[90m[5c2747f8] �[39mURIs v1.5.1
  �[90m[3a884ed6] �[39mUnPack v1.0.2
  �[90m[1cfade01] �[39mUnicodeFun v0.4.1
  �[90m[1986cc42] �[39mUnitful v1.21.0
  �[90m[45397f5d] �[39mUnitfulLatexify v1.6.4
  �[90m[a7c27f48] �[39mUnityper v0.1.6
  �[90m[013be700] �[39mUnsafeAtomics v0.2.1
  �[90m[d80eeb9a] �[39mUnsafeAtomicsLLVM v0.2.1
  �[90m[41fe7b60] �[39mUnzip v0.2.0
  �[90m[3d5dd08c] �[39mVectorizationBase v0.21.70
  �[90m[19fa3120] �[39mVertexSafeGraphs v0.2.0
  �[90m[ea10d353] �[39mWeakRefStrings v1.4.2
  �[90m[76eceee3] �[39mWorkerUtilities v1.6.1
  �[90m[6e34b625] �[39mBzip2_jll v1.0.8+1
  �[90m[83423d85] �[39mCairo_jll v1.18.0+2
  �[90m[ee1fde0b] �[39mDbus_jll v1.14.10+0
  �[90m[2702e6a9] �[39mEpollShim_jll v0.0.20230411+0
  �[90m[2e619515] �[39mExpat_jll v2.6.2+0
�[33m⌅�[39m �[90m[b22a6f82] �[39mFFMPEG_jll v4.4.4+1
  �[90m[f5851436] �[39mFFTW_jll v3.3.10+0
  �[90m[a3f928ae] �[39mFontconfig_jll v2.13.96+0
  �[90m[d7e528f0] �[39mFreeType2_jll v2.13.2+0
  �[90m[559328eb] �[39mFriBidi_jll v1.0.14+0
  �[90m[0656b61e] �[39mGLFW_jll v3.4.0+1
  �[90m[d2c73de3] �[39mGR_jll v0.73.7+0
  �[90m[78b55507] �[39mGettext_jll v0.21.0+0
  �[90m[7746bdde] �[39mGlib_jll v2.80.2+0
  �[90m[3b182d85] �[39mGraphite2_jll v1.3.14+0
  �[90m[2e76f6c2] �[39mHarfBuzz_jll v8.3.1+0
  �[90m[1d5cc7b8] �[39mIntelOpenMP_jll v2024.2.1+0
  �[90m[aacddb02] �[39mJpegTurbo_jll v3.0.3+0
  �[90m[c1c5ebd0] �[39mLAME_jll v3.100.2+0
�[33m⌅�[39m �[90m[88015f11] �[39mLERC_jll v3.0.0+1
  �[90m[dad2f222] �[39mLLVMExtra_jll v0.0.34+0
  �[90m[1d63c593] �[39mLLVMOpenMP_jll v18.1.7+0
  �[90m[dd4b983a] �[39mLZO_jll v2.10.2+0
�[33m⌅�[39m �[90m[e9f186c6] �[39mLibffi_jll v3.2.2+1
  �[90m[d4300ac3] �[39mLibgcrypt_jll v1.8.11+0
  �[90m[7e76a0d4] �[39mLibglvnd_jll v1.6.0+0
  �[90m[7add5ba3] �[39mLibgpg_error_jll v1.49.0+0
  �[90m[94ce4f54] �[39mLibiconv_jll v1.17.0+0
  �[90m[4b2f31a3] �[39mLibmount_jll v2.40.1+0
�[33m⌅�[39m �[90m[89763e89] �[39mLibtiff_jll v4.5.1+1
  �[90m[38a345b3] �[39mLibuuid_jll v2.40.1+0
  �[90m[856f044c] �[39mMKL_jll v2024.2.0+0
  �[90m[e7412a2a] �[39mOgg_jll v1.3.5+1
  �[90m[458c3c95] �[39mOpenSSL_jll v3.0.15+0
  �[90m[efe28fd5] �[39mOpenSpecFun_jll v0.5.5+0
  �[90m[91d4177d] �[39mOpus_jll v1.3.3+0
  �[90m[36c8627f] �[39mPango_jll v1.54.1+0
  �[90m[30392449] �[39mPixman_jll v0.43.4+0
  �[90m[c0090381] �[39mQt6Base_jll v6.7.1+1
  �[90m[629bc702] �[39mQt6Declarative_jll v6.7.1+2
  �[90m[ce943373] �[39mQt6ShaderTools_jll v6.7.1+1
  �[90m[e99dba38] �[39mQt6Wayland_jll v6.7.1+1
  �[90m[f50d1b31] �[39mRmath_jll v0.5.1+0
�[33m⌅�[39m �[90m[fb77eaff] �[39mSundials_jll v5.2.2+0
  �[90m[a44049a8] �[39mVulkan_Loader_jll v1.3.243+0
  �[90m[a2964d1f] �[39mWayland_jll v1.21.0+1
  �[90m[2381bf8a] �[39mWayland_protocols_jll v1.31.0+0
  �[90m[02c8fc9c] �[39mXML2_jll v2.13.3+0
  �[90m[aed1982a] �[39mXSLT_jll v1.1.41+0
  �[90m[ffd25f8a] �[39mXZ_jll v5.4.6+0
  �[90m[f67eecfb] �[39mXorg_libICE_jll v1.1.1+0
  �[90m[c834827a] �[39mXorg_libSM_jll v1.2.4+0
  �[90m[4f6342f7] �[39mXorg_libX11_jll v1.8.6+0
  �[90m[0c0b7dd1] �[39mXorg_libXau_jll v1.0.11+0
  �[90m[935fb764] �[39mXorg_libXcursor_jll v1.2.0+4
  �[90m[a3789734] �[39mXorg_libXdmcp_jll v1.1.4+0
  �[90m[1082639a] �[39mXorg_libXext_jll v1.3.6+0
  �[90m[d091e8ba] �[39mXorg_libXfixes_jll v5.0.3+4
  �[90m[a51aa0fd] �[39mXorg_libXi_jll v1.7.10+4
  �[90m[d1454406] �[39mXorg_libXinerama_jll v1.1.4+4
  �[90m[ec84b674] �[39mXorg_libXrandr_jll v1.5.2+4
  �[90m[ea2f1a96] �[39mXorg_libXrender_jll v0.9.11+0
  �[90m[14d82f49] �[39mXorg_libpthread_stubs_jll v0.1.1+0
  �[90m[c7cfdc94] �[39mXorg_libxcb_jll v1.17.0+0
  �[90m[cc61e674] �[39mXorg_libxkbfile_jll v1.1.2+0
  �[90m[e920d4aa] �[39mXorg_xcb_util_cursor_jll v0.1.4+0
  �[90m[12413925] �[39mXorg_xcb_util_image_jll v0.4.0+1
  �[90m[2def613f] �[39mXorg_xcb_util_jll v0.4.0+1
  �[90m[975044d2] �[39mXorg_xcb_util_keysyms_jll v0.4.0+1
  �[90m[0d47668e] �[39mXorg_xcb_util_renderutil_jll v0.3.9+1
  �[90m[c22f9ab0] �[39mXorg_xcb_util_wm_jll v0.4.1+1
  �[90m[35661453] �[39mXorg_xkbcomp_jll v1.4.6+0
  �[90m[33bec58e] �[39mXorg_xkeyboard_config_jll v2.39.0+0
  �[90m[c5fb5394] �[39mXorg_xtrans_jll v1.5.0+0
  �[90m[3161d3a3] �[39mZstd_jll v1.5.6+0
  �[90m[35ca27e7] �[39meudev_jll v3.2.9+0
  �[90m[214eeab7] �[39mfzf_jll v0.53.0+0
  �[90m[1a1c6b14] �[39mgperf_jll v3.1.1+0
  �[90m[a4ae2306] �[39mlibaom_jll v3.9.0+0
  �[90m[0ac62f75] �[39mlibass_jll v0.15.2+0
  �[90m[1183f4f0] �[39mlibdecor_jll v0.2.2+0
  �[90m[2db6ffa8] �[39mlibevdev_jll v1.11.0+0
  �[90m[f638f0a6] �[39mlibfdk_aac_jll v2.0.3+0
  �[90m[36db933b] �[39mlibinput_jll v1.18.0+0
  �[90m[b53b4c65] �[39mlibpng_jll v1.6.43+1
  �[90m[f27f6e37] �[39mlibvorbis_jll v1.3.7+2
  �[90m[009596ad] �[39mmtdev_jll v1.1.6+0
  �[90m[1317d2d5] �[39moneTBB_jll v2021.12.0+0
�[33m⌅�[39m �[90m[1270edf5] �[39mx264_jll v2021.5.5+0
�[33m⌅�[39m �[90m[dfaa095f] �[39mx265_jll v3.5.0+0
  �[90m[d8fb68d0] �[39mxkbcommon_jll v1.4.1+1
  �[90m[0dad84c5] �[39mArgTools v1.1.1
  �[90m[56f22d72] �[39mArtifacts
  �[90m[2a0f44e3] �[39mBase64
  �[90m[ade2ca70] �[39mDates
  �[90m[8ba89e20] �[39mDistributed
  �[90m[f43a241f] �[39mDownloads v1.6.0
  �[90m[7b1f6079] �[39mFileWatching
  �[90m[9fa8497b] �[39mFuture
  �[90m[b77e0a4c] �[39mInteractiveUtils
  �[90m[4af54fe1] �[39mLazyArtifacts
  �[90m[b27032c2] �[39mLibCURL v0.6.4
  �[90m[76f85450] �[39mLibGit2
  �[90m[8f399da3] �[39mLibdl
  �[90m[37e2e46d] �[39mLinearAlgebra
  �[90m[56ddb016] �[39mLogging
  �[90m[d6f4376e] �[39mMarkdown
  �[90m[a63ad114] �[39mMmap
  �[90m[ca575930] �[39mNetworkOptions v1.2.0
  �[90m[44cfe95a] �[39mPkg v1.10.0
  �[90m[de0858da] �[39mPrintf
  �[90m[9abbd945] �[39mProfile
  �[90m[3fa0cd96] �[39mREPL
  �[90m[9a3f8284] �[39mRandom
  �[90m[ea8e919c] �[39mSHA v0.7.0
  �[90m[9e88b42a] �[39mSerialization
  �[90m[1a1011a3] �[39mSharedArrays
  �[90m[6462fe0b] �[39mSockets
  �[90m[2f01184e] �[39mSparseArrays v1.10.0
  �[90m[10745b16] �[39mStatistics v1.10.0
  �[90m[4607b0f0] �[39mSuiteSparse
  �[90m[fa267f1f] �[39mTOML v1.0.3
  �[90m[a4e569a6] �[39mTar v1.10.0
  �[90m[8dfed614] �[39mTest
  �[90m[cf7118a7] �[39mUUIDs
  �[90m[4ec0a83e] �[39mUnicode
  �[90m[e66e0078] �[39mCompilerSupportLibraries_jll v1.1.1+0
  �[90m[deac9b47] �[39mLibCURL_jll v8.4.0+0
  �[90m[e37daf67] �[39mLibGit2_jll v1.6.4+0
  �[90m[29816b5a] �[39mLibSSH2_jll v1.11.0+1
  �[90m[c8ffd9c3] �[39mMbedTLS_jll v2.28.2+1
  �[90m[14a3606d] �[39mMozillaCACerts_jll v2023.1.10
  �[90m[4536629a] �[39mOpenBLAS_jll v0.3.23+4
  �[90m[05823500] �[39mOpenLibm_jll v0.8.1+2
  �[90m[efcefdf7] �[39mPCRE2_jll v10.42.0+1
  �[90m[bea87d4a] �[39mSuiteSparse_jll v7.2.1+1
  �[90m[83775a58] �[39mZlib_jll v1.2.13+1
  �[90m[8e850b90] �[39mlibblastrampoline_jll v5.11.0+0
  �[90m[8e850ede] �[39mnghttp2_jll v1.52.0+1
  �[90m[3f19e933] �[39mp7zip_jll v17.4.0+2
�[36m�[1mInfo�[22m�[39m Packages marked with �[32m⌃�[39m and �[33m⌅�[39m have new versions available. Those with �[32m⌃�[39m may be upgradable, but those with �[33m⌅�[39m are restricted by compatibility constraints from upgrading. To see why use `status --outdated -m`
  • Output of versioninfo()
Julia Version 1.10.5
Commit 6f3fdf7b36 (2024-08-27 14:19 UTC)
Build Info:
  Official https://julialang.org/ release
Platform Info:
  OS: Windows (x86_64-w64-mingw32)
  CPU: 16 × Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-15.0.7 (ORCJIT, skylake)
Threads: 1 default, 0 interactive, 1 GC (on 16 virtual cores)
Environment:
  JULIA_NUM_THREADS = 

Additional context

Add any other context about the problem here.

@B-LIE B-LIE added the bug Something isn't working label Sep 19, 2024
@baggepinnen
Copy link
Contributor

baggepinnen commented Sep 19, 2024

The generated dynamics function appears to contain unexpanded derivatives

uf.f.f.f_oop
RuntimeGeneratedFunction(#=in ModelingToolkit=#, #=using ModelingToolkit=#, :((ˍ₋arg1, ˍ₋arg2, t)->begin
                      begin
                          var"h_1(t)" = (/)(ˍ₋arg2[9], ˍ₋arg2[13])
                          var"h_1ˍt(t)" = (/)((Differential(t))(ˍ₋arg2[9]), ˍ₋arg2[13])
...

The problem is in simplification:

io = ([t4_LZ.y_1, t4_LZ.y_2], [t4_LZ.h_3, t4_LZ.h_4])
ssys, _ = structural_simplify(t4_LZ, io)

julia> full_equations(ssys)
2-element Vector{Equation}:
 Differential(t)(h_3(t)) ~ (-a_3*sqrt(2g*h_3(t))) / A_3 + (A_2*((a_2*sqrt((2g*y_2(t)) / k_c)) / A_2 + (-a_4*sqrt(2g*h_4(t))) / A_2 + Differential(t)(y_2(t)) / k_c)*(1 - γ_2)) / (A_3*γ_2)
 Differential(t)(h_4(t)) ~ (-a_4*sqrt(2g*h_4(t))) / A_4 + (A_1*((-a_3*sqrt(2g*h_3(t))) / A_1 + Differential(t)(y_1(t)) / k_c + (a_1*sqrt((2g*y_1(t)) / k_c)) / A_1)*(1 - γ_1)) / (A_4*γ_1)

there should be no Differential(t) in the equations at this stage.

I'm not surprised that this happens, to invert a strictly proper model you will need some order of derivatives of the inputs. When simulating, this may work out if the input function is differentiable, but when linearizing there is nothing to differentiate, so the compiler has to be augmented with support for this use case, i.e., by

  • Erroring with a useful error message.
  • Or better, indicate that the user must also provide the derivatives of inputs as another set of inputs

What you can do right now is to introduce new input variables yd_1 and define y_1 as D(y_1) ~ yd_1, I think that this should work


EDIT: It does work

@mtkmodel FourTank begin
    # Ref: Johansson, K.H. (2000): "The Quadruple-Tank Process: A Multivariable 
    #               Laboratory Process with an Adjustable Zero", 
    #               IEEE Trans. Ctrl. Tech., Vol. 8, No. 3, May 2000
    # Structure parameters
    @structural_parameters begin
        # :io = standard input-output, :zero = zero dynamics
        # :lin_io = linearizing input-output, :lin_zero = linearizing zero dynamics
        case = :io 
    end
    #
    # Model parameters
    @parameters begin
        # Constant 
        g = 981,            [description = "Acceleration of gravity, cm/s^2"]
        # Parameters
        # -- tank parameters
        A_1 = 28,           [description = "Tank 1, cross-section area, cm^2"]
        A_2 = 32,           [description = "Tank 2, cross-section area, cm^2"]
        A_3 = 28,           [description = "Tank 3, cross-section area, cm^2"]
        A_4 = 32,           [description = "Tank 4, cross-section area, cm^2"]
        a_1 = 0.071,        [description = "Tank 1, cross-section area of outlet hole, cm^2"]
        a_2 = 0.057,        [description = "Tank 2, cross-section area of outlet hole, cm^2"]
        a_3 = 0.071,        [description = "Tank 3, cross-section area of outlet hole, cm^2"]
        a_4 = 0.057,        [description = "Tank 4, cross-section area of outlet hole, cm^2"]
        # -- valve parameters, case of LHP zeros/stable zero dynamics
        γ_1 = 0.70,         [description = "Valve 1 split setting, -"]
        γ_2 = 0.60,         [description = "Valve 2 split setting, -"]
        k_1 = 3.33,         [description = "Valve 1 gain, cm3/V.s"]
        k_2 = 3.35,         [description = "Valve 2 gain, cm3/V.s"]
        # -- sensor parameter
        k_c = 0.5,          [description = "Sensor gain, V/cm"]
    end
    #
    # Model variables, with initial values needed
    @variables begin
        # Variables
        # -- states
        h_1(t)=12.4,        [description = "Tank 1 level, cm"]
        h_2(t)=12.7,        [description = "Tank 2 level, cm"]
        h_3(t)=1.8,         [description = "Tank 3 level, cm"]
        h_4(t)=1.4,         [description = "Tank 4 level, cm"]
        # -- sensor signals
        y_1(t),             [description = "Output 1: level in Tank 1, cm"]
        y_2(t),             [description = "Output 2: level in Tank 2, cm"]
        dy_1(t) = 0,            [description = "Derivative of output 1, cm/s"]
        dy_2(t) = 0,            [description = "Derivative of output 2, cm/s"]
        # -- actuator signals
        v_1(t),             [description = "Valve 1 signal, V"]
        v_2(t),             [description = "Valve 2 signal, V"]
    end
    #
    # Model equations
    @equations begin
        # ODEs
        Dt(h_1) ~ -a_1/A_1*sqrt(2g*h_1) + a_3/A_1*sqrt(2g*h_3) + γ_1*k_1/A_1*v_1
        Dt(h_2) ~ -a_2/A_2*sqrt(2g*h_2) + a_4/A_2*sqrt(2g*h_4) + γ_2*k_2/A_2*v_2
        Dt(h_3) ~ -a_3/A_3*sqrt(2g*h_3) + (1-γ_2)*k_2/A_3*v_2
        Dt(h_4) ~ -a_4/A_4*sqrt(2g*h_4) + (1-γ_1)*k_1/A_4*v_1
        # Outputs
        y_1 ~ k_c*h_1
        y_2 ~ k_c*h_2
        dy_1 ~ Dt(y_1)
        dy_2 ~ Dt(y_2)
        # Inputs
        if case == :io
            v_1 ~ u_v_1(t)
            v_2 ~ u_v_2(t)
        elseif case == :lin_io
            #v_1 ~ u_v_1(t)
            #v_2 ~ u_v_2(t)
        elseif case == :zero
            y_1 ~ u_r_1(t)
            y_2 ~ u_r_2(t)
        elseif case == :lin_zero
            #y_1 ~ u_r_1(t)
            #y_2 ~ u_r_2(t)
        end
    end
end
# 
# Instantiating case for linearizing zero dynamics
@named t4_LZ= FourTank(; case=:lin_zero)
t4_LZ= complete(t4_LZ)

io = [t4_LZ.dy_1, t4_LZ.dy_2], [t4_LZ.h_3, t4_LZ.h_4]

# 
# Symbolic linearization -- gives error
mats,t4z_ = ModelingToolkit.linearize_symbolic(t4_LZ, io...)
# 
# Numeric linearization -- gives error
mats,t4z_ = ModelingToolkit.linearize(t4_LZ, io...;
                op=Dict(t4_LZ.y_1 => 6.2, t4_LZ.y_2 => 6.35))

@baggepinnen baggepinnen changed the title MTK.linearize_symbolic and MTK.linearize fails for "simple" system - different error messages Linearization of improper (differentiating / inverse) models Sep 19, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants