Code generation utilities

These are lower-level functions that ModelingToolkit leverages to generate code for building numerical problems.

ModelingToolkit.generate_rhsFunction
generate_rhs(
    sys::System;
    implicit_dae,
    scalar,
    expression,
    wrap_gfw,
    eval_expression,
    eval_module,
    override_discrete,
    kwargs...
) -> Union{Expr, Tuple{Expr, Expr}}

Generate the RHS function for the equations of a System.

Keyword Arguments

  • expression: Val{true} if this should return an Expr (or tuple of Exprs) of the generated code. Val{false} otherwise.
  • wrap_gfw: Val{true} if the returned functions should be wrapped in a callable struct to make them callable using the expected syntax. The callable struct itself is internal API. If expression == Val{true}, the returned expression will construct the callable struct. If this function returns a tuple of functions/expressions, both will be identical if wrap_gfw == Val{true}.
  • eval_expression: Whether to compile any functions via eval or RuntimeGeneratedFunctions.
  • eval_module: If eval_expression == true, the module to eval into. Otherwise, the module in which to generate the RuntimeGeneratedFunction.
  • implicit_dae: Whether the generated function should be in the implicit form. Applicable only for ODEs/DAEs or discrete systems. Instead of f(u, p, t) (f(du, u, p, t) for the in-place form) the function is f(du, u, p, t) (respectively f(resid, du, u, p, t)).
  • override_discrete: Whether to assume the system is discrete regardless of is_discrete_system(sys).
  • scalar: Whether to generate a single-out-of-place function that returns a scalar for the only equation in the system.

All other keyword arguments are forwarded to build_function_wrapper.

source
ModelingToolkit.generate_diffusion_functionFunction
generate_diffusion_function(
    sys::System;
    expression,
    wrap_gfw,
    eval_expression,
    eval_module,
    kwargs...
) -> Any

Generate the diffusion function for the noise equations of a System.

Keyword Arguments

  • expression: Val{true} if this should return an Expr (or tuple of Exprs) of the generated code. Val{false} otherwise.
  • wrap_gfw: Val{true} if the returned functions should be wrapped in a callable struct to make them callable using the expected syntax. The callable struct itself is internal API. If expression == Val{true}, the returned expression will construct the callable struct. If this function returns a tuple of functions/expressions, both will be identical if wrap_gfw == Val{true}.
  • eval_expression: Whether to compile any functions via eval or RuntimeGeneratedFunctions.
  • eval_module: If eval_expression == true, the module to eval into. Otherwise, the module in which to generate the RuntimeGeneratedFunction.

All other keyword arguments are forwarded to build_function_wrapper.

source
ModelingToolkit.generate_jacobianFunction
generate_jacobian(
    sys::System;
    simplify,
    sparse,
    eval_expression,
    eval_module,
    expression,
    wrap_gfw,
    kwargs...
) -> Union{Expr, Tuple{Expr, Expr}}

Generate the jacobian function for the equations of a System.

Keyword Arguments

  • expression: Val{true} if this should return an Expr (or tuple of Exprs) of the generated code. Val{false} otherwise.
  • wrap_gfw: Val{true} if the returned functions should be wrapped in a callable struct to make them callable using the expected syntax. The callable struct itself is internal API. If expression == Val{true}, the returned expression will construct the callable struct. If this function returns a tuple of functions/expressions, both will be identical if wrap_gfw == Val{true}.
  • eval_expression: Whether to compile any functions via eval or RuntimeGeneratedFunctions.
  • eval_module: If eval_expression == true, the module to eval into. Otherwise, the module in which to generate the RuntimeGeneratedFunction.

All other keyword arguments are forwarded to build_function_wrapper.

source
ModelingToolkit.generate_tgradFunction
generate_tgrad(
    sys::System;
    simplify,
    eval_expression,
    eval_module,
    expression,
    wrap_gfw,
    kwargs...
) -> Union{Expr, Tuple{Expr, Expr}}

Generate the tgrad function for the equations of a System.

Keyword Arguments

  • expression: Val{true} if this should return an Expr (or tuple of Exprs) of the generated code. Val{false} otherwise.
  • wrap_gfw: Val{true} if the returned functions should be wrapped in a callable struct to make them callable using the expected syntax. The callable struct itself is internal API. If expression == Val{true}, the returned expression will construct the callable struct. If this function returns a tuple of functions/expressions, both will be identical if wrap_gfw == Val{true}.
  • eval_expression: Whether to compile any functions via eval or RuntimeGeneratedFunctions.
  • eval_module: If eval_expression == true, the module to eval into. Otherwise, the module in which to generate the RuntimeGeneratedFunction.

All other keyword arguments are forwarded to build_function_wrapper.

source
ModelingToolkit.generate_WFunction
generate_W(
    sys::System;
    simplify,
    sparse,
    expression,
    wrap_gfw,
    eval_expression,
    eval_module,
    kwargs...
) -> Union{Expr, Tuple{Expr, Expr}}

Generate the W = γ * M + J function for the equations of a System.

Keyword Arguments

  • expression: Val{true} if this should return an Expr (or tuple of Exprs) of the generated code. Val{false} otherwise.
  • wrap_gfw: Val{true} if the returned functions should be wrapped in a callable struct to make them callable using the expected syntax. The callable struct itself is internal API. If expression == Val{true}, the returned expression will construct the callable struct. If this function returns a tuple of functions/expressions, both will be identical if wrap_gfw == Val{true}.
  • eval_expression: Whether to compile any functions via eval or RuntimeGeneratedFunctions.
  • eval_module: If eval_expression == true, the module to eval into. Otherwise, the module in which to generate the RuntimeGeneratedFunction.

All other keyword arguments are forwarded to build_function_wrapper.

source
ModelingToolkit.generate_dae_jacobianFunction
generate_dae_jacobian(
    sys::System;
    simplify,
    sparse,
    expression,
    wrap_gfw,
    eval_expression,
    eval_module,
    kwargs...
) -> Union{Expr, Tuple{Expr, Expr}}

Generate the DAE jacobian γ * J′ + J function for the equations of a System. J′ is the jacobian of the equations with respect to the du vector, and J is the standard jacobian.

Keyword Arguments

  • expression: Val{true} if this should return an Expr (or tuple of Exprs) of the generated code. Val{false} otherwise.
  • wrap_gfw: Val{true} if the returned functions should be wrapped in a callable struct to make them callable using the expected syntax. The callable struct itself is internal API. If expression == Val{true}, the returned expression will construct the callable struct. If this function returns a tuple of functions/expressions, both will be identical if wrap_gfw == Val{true}.
  • eval_expression: Whether to compile any functions via eval or RuntimeGeneratedFunctions.
  • eval_module: If eval_expression == true, the module to eval into. Otherwise, the module in which to generate the RuntimeGeneratedFunction.

All other keyword arguments are forwarded to build_function_wrapper.

source
ModelingToolkit.generate_historyFunction
generate_history(
    sys::System,
    u0;
    expression,
    wrap_gfw,
    eval_expression,
    eval_module,
    kwargs...
) -> Union{Expr, Tuple{Expr, Expr}}

Generate the history function for a System, given a symbolic representation of the u0 vector prior to the initial time.

Keyword Arguments

  • expression: Val{true} if this should return an Expr (or tuple of Exprs) of the generated code. Val{false} otherwise.
  • wrap_gfw: Val{true} if the returned functions should be wrapped in a callable struct to make them callable using the expected syntax. The callable struct itself is internal API. If expression == Val{true}, the returned expression will construct the callable struct. If this function returns a tuple of functions/expressions, both will be identical if wrap_gfw == Val{true}.
  • eval_expression: Whether to compile any functions via eval or RuntimeGeneratedFunctions.
  • eval_module: If eval_expression == true, the module to eval into. Otherwise, the module in which to generate the RuntimeGeneratedFunction.

All other keyword arguments are forwarded to build_function_wrapper.

source
ModelingToolkit.generate_boundary_conditionsFunction
generate_boundary_conditions(
    sys::System,
    u0,
    u0_idxs,
    t0;
    expression,
    wrap_gfw,
    eval_expression,
    eval_module,
    kwargs...
) -> Union{Expr, Tuple{Expr, Expr}}

Generate the boundary condition function for a System given the state vector u0, the indexes of u0 to consider as hard constraints u0_idxs and the initial time t0.

Keyword Arguments

  • expression: Val{true} if this should return an Expr (or tuple of Exprs) of the generated code. Val{false} otherwise.
  • wrap_gfw: Val{true} if the returned functions should be wrapped in a callable struct to make them callable using the expected syntax. The callable struct itself is internal API. If expression == Val{true}, the returned expression will construct the callable struct. If this function returns a tuple of functions/expressions, both will be identical if wrap_gfw == Val{true}.
  • eval_expression: Whether to compile any functions via eval or RuntimeGeneratedFunctions.
  • eval_module: If eval_expression == true, the module to eval into. Otherwise, the module in which to generate the RuntimeGeneratedFunction.

All other keyword arguments are forwarded to build_function_wrapper.

source
ModelingToolkit.generate_costFunction
generate_cost(
    sys::System;
    expression,
    wrap_gfw,
    eval_expression,
    eval_module,
    kwargs...
) -> Any

Generate the cost function for a System.

Keyword Arguments

  • expression: Val{true} if this should return an Expr (or tuple of Exprs) of the generated code. Val{false} otherwise.
  • wrap_gfw: Val{true} if the returned functions should be wrapped in a callable struct to make them callable using the expected syntax. The callable struct itself is internal API. If expression == Val{true}, the returned expression will construct the callable struct. If this function returns a tuple of functions/expressions, both will be identical if wrap_gfw == Val{true}.
  • eval_expression: Whether to compile any functions via eval or RuntimeGeneratedFunctions.
  • eval_module: If eval_expression == true, the module to eval into. Otherwise, the module in which to generate the RuntimeGeneratedFunction.

All other keyword arguments are forwarded to build_function_wrapper.

source
ModelingToolkit.generate_cost_gradientFunction
generate_cost_gradient(
    sys::System;
    expression,
    wrap_gfw,
    eval_expression,
    eval_module,
    simplify,
    kwargs...
) -> Union{Expr, Tuple{Expr, Expr}}

Generate the gradient of the cost function with respect to unknowns for a System.

Keyword Arguments

  • expression: Val{true} if this should return an Expr (or tuple of Exprs) of the generated code. Val{false} otherwise.
  • wrap_gfw: Val{true} if the returned functions should be wrapped in a callable struct to make them callable using the expected syntax. The callable struct itself is internal API. If expression == Val{true}, the returned expression will construct the callable struct. If this function returns a tuple of functions/expressions, both will be identical if wrap_gfw == Val{true}.
  • eval_expression: Whether to compile any functions via eval or RuntimeGeneratedFunctions.
  • eval_module: If eval_expression == true, the module to eval into. Otherwise, the module in which to generate the RuntimeGeneratedFunction.

All other keyword arguments are forwarded to build_function_wrapper.

source
ModelingToolkit.generate_cost_hessianFunction
generate_cost_hessian(
    sys::System;
    expression,
    wrap_gfw,
    eval_expression,
    eval_module,
    simplify,
    sparse,
    return_sparsity,
    kwargs...
) -> Union{Tuple{Expr, Expr}, Tuple{Tuple{Expr, Expr}, Union{Nothing, SparseArrays.SparseMatrixCSC{Float64, Int64}, Matrix{Float64}}}}

Generate the hessian of the cost function for a System.

Keyword Arguments

  • expression: Val{true} if this should return an Expr (or tuple of Exprs) of the generated code. Val{false} otherwise.
  • wrap_gfw: Val{true} if the returned functions should be wrapped in a callable struct to make them callable using the expected syntax. The callable struct itself is internal API. If expression == Val{true}, the returned expression will construct the callable struct. If this function returns a tuple of functions/expressions, both will be identical if wrap_gfw == Val{true}.
  • eval_expression: Whether to compile any functions via eval or RuntimeGeneratedFunctions.
  • eval_module: If eval_expression == true, the module to eval into. Otherwise, the module in which to generate the RuntimeGeneratedFunction.
  • simplify, sparse: Forwarded to calculate_cost_hessian.
  • return_sparsity: Whether to also return the sparsity pattern of the hessian as the second return value.

All other keyword arguments are forwarded to build_function_wrapper.

source
ModelingToolkit.generate_consFunction
generate_cons(
    sys::System;
    expression,
    wrap_gfw,
    eval_expression,
    eval_module,
    kwargs...
) -> Union{Expr, Tuple{Expr, Expr}}

Generate the constraint function for a System.

Keyword Arguments

  • expression: Val{true} if this should return an Expr (or tuple of Exprs) of the generated code. Val{false} otherwise.
  • wrap_gfw: Val{true} if the returned functions should be wrapped in a callable struct to make them callable using the expected syntax. The callable struct itself is internal API. If expression == Val{true}, the returned expression will construct the callable struct. If this function returns a tuple of functions/expressions, both will be identical if wrap_gfw == Val{true}.
  • eval_expression: Whether to compile any functions via eval or RuntimeGeneratedFunctions.
  • eval_module: If eval_expression == true, the module to eval into. Otherwise, the module in which to generate the RuntimeGeneratedFunction.

All other keyword arguments are forwarded to build_function_wrapper.

source
ModelingToolkit.generate_constraint_jacobianFunction
generate_constraint_jacobian(
    sys::System;
    expression,
    wrap_gfw,
    eval_expression,
    eval_module,
    return_sparsity,
    simplify,
    sparse,
    kwargs...
) -> Union{Expr, Tuple{Union{Expr, Tuple{Expr, Expr}}, Any}}

Generate the jacobian of the constraint function for a System.

Keyword Arguments

  • expression: Val{true} if this should return an Expr (or tuple of Exprs) of the generated code. Val{false} otherwise.
  • wrap_gfw: Val{true} if the returned functions should be wrapped in a callable struct to make them callable using the expected syntax. The callable struct itself is internal API. If expression == Val{true}, the returned expression will construct the callable struct. If this function returns a tuple of functions/expressions, both will be identical if wrap_gfw == Val{true}.
  • eval_expression: Whether to compile any functions via eval or RuntimeGeneratedFunctions.
  • eval_module: If eval_expression == true, the module to eval into. Otherwise, the module in which to generate the RuntimeGeneratedFunction.
  • simplify, sparse: Forwarded to calculate_constraint_jacobian.
  • return_sparsity: Whether to also return the sparsity pattern of the jacobian as the second return value.

All other keyword arguments are forwarded to build_function_wrapper.

source
ModelingToolkit.generate_constraint_hessianFunction
generate_constraint_hessian(
    sys::System;
    expression,
    wrap_gfw,
    eval_expression,
    eval_module,
    return_sparsity,
    simplify,
    sparse,
    kwargs...
) -> Union{Expr, Tuple{Union{Expr, Tuple{Expr, Expr}}, Any}}

Generate the hessian of the constraint function for a System.

Keyword Arguments

  • expression: Val{true} if this should return an Expr (or tuple of Exprs) of the generated code. Val{false} otherwise.
  • wrap_gfw: Val{true} if the returned functions should be wrapped in a callable struct to make them callable using the expected syntax. The callable struct itself is internal API. If expression == Val{true}, the returned expression will construct the callable struct. If this function returns a tuple of functions/expressions, both will be identical if wrap_gfw == Val{true}.
  • eval_expression: Whether to compile any functions via eval or RuntimeGeneratedFunctions.
  • eval_module: If eval_expression == true, the module to eval into. Otherwise, the module in which to generate the RuntimeGeneratedFunction.
  • simplify, sparse: Forwarded to calculate_constraint_hessian.
  • return_sparsity: Whether to also return the sparsity pattern of the hessian as the second return value.

All other keyword arguments are forwarded to build_function_wrapper.

source
ModelingToolkit.generate_control_jacobianFunction
generate_control_jacobian(
    sys::ModelingToolkit.AbstractSystem;
    expression,
    wrap_gfw,
    eval_expression,
    eval_module,
    simplify,
    sparse,
    kwargs...
) -> Union{Expr, Tuple{Expr, Expr}}

Generate the jacobian function of the equations of sys with respect to the inputs.

Keyword arguments

  • expression: Val{true} if this should return an Expr (or tuple of Exprs) of the generated code. Val{false} otherwise.
  • wrap_gfw: Val{true} if the returned functions should be wrapped in a callable struct to make them callable using the expected syntax. The callable struct itself is internal API. If expression == Val{true}, the returned expression will construct the callable struct. If this function returns a tuple of functions/expressions, both will be identical if wrap_gfw == Val{true}.
  • eval_expression: Whether to compile any functions via eval or RuntimeGeneratedFunctions.
  • eval_module: If eval_expression == true, the module to eval into. Otherwise, the module in which to generate the RuntimeGeneratedFunction.

All other keyword arguments are forwarded to build_function_wrapper.

source
ModelingToolkit.build_explicit_observed_functionFunction
build_explicit_observed_function(sys, ts; kwargs...) -> Function(s)

Generates a function that computes the observed value(s) ts in the system sys, while making the assumption that there are no cycles in the equations.

Arguments

  • sys: The system for which to generate the function
  • ts: The symbolic observed values whose value should be computed

Keywords

  • return_inplace = false: If true and the observed value is a vector, then return both the in place and out of place methods.
  • expression = false: Generates a Julia Exprcomputing the observed value ifexpression` is true
  • eval_expression = false: If true and expression = false, evaluates the returned function in the module eval_module
  • output_type = Array the type of the array generated by a out-of-place vector-valued function
  • param_only = false if true, only allow the generated function to access system parameters
  • inputs = nothing additinoal symbolic variables that should be provided to the generated function
  • checkbounds = true checks bounds if true when destructuring parameters
  • op = Operator sets the recursion terminator for the walk done by vars to identify the variables that appear in ts. See the documentation for vars for more detail.
  • throw = true if true, throw an error when generating a function for ts that reference variables that do not exist.
  • mkarray: only used if the output is an array (that is, !isscalar(ts) and ts is not a tuple, in which case the result will always be a tuple). Called as mkarray(ts, output_type) where ts are the expressions to put in the array and output_type is the argument of the same name passed to buildexplicitobserved_function.
  • cse = true: Whether to use Common Subexpression Elimination (CSE) to generate a more efficient function.
  • wrap_delays = is_dde(sys): Whether to add an argument for the history function and use it to calculate all delayed variables.

Returns

The return value will be either:

  • a single function f_oop if the input is a scalar or if the input is a Vector but return_inplace is false
  • the out of place and in-place functions (f_ip, f_oop) if return_inplace is true and the input is a Vector

The function(s) f_oop (and potentially f_ip) will be:

  • RuntimeGeneratedFunctions by default,
  • A Julia Expr if expression is true,
  • A directly evaluated Julia function in the module eval_module if eval_expression is true and expression is false.

The signatures will be of the form g(...) with arguments:

  • output for in-place functions
  • unknowns if param_only is false
  • inputs if inputs is an array of symbolic inputs that should be available in ts
  • p... unconditionally; note that in the case of MTKParameters more than one parameters argument may be present, so it must be splatted
  • t if the system is time-dependent; for example systems of nonlinear equations will not have t

For example, a function g(op, unknowns, p..., inputs, t) will be the in-place function generated if return_inplace is true, ts is a vector, an array of inputs inputs is given, and param_only is false for a time-dependent system.

source
ModelingToolkit.generate_control_functionFunction
generate_control_function(sys::ModelingToolkit.AbstractSystem, input_ap_name::Union{Symbol, Vector{Symbol}, AnalysisPoint, Vector{AnalysisPoint}}, dist_ap_name::Union{Symbol, Vector{Symbol}, AnalysisPoint, Vector{AnalysisPoint}}; system_modifier = identity, kwargs)

When called with analysis points as input arguments, we assume that all analysis points corresponds to connections that should be opened (broken). The use case for this is to get rid of input signal blocks, such as Step or Sine, since these are useful for simulation but are not needed when using the plant model in a controller or state estimator.

source
(f_oop, f_ip), x_sym, p_sym, io_sys = generate_control_function(
        sys::System,
        inputs             = unbound_inputs(sys),
        disturbance_inputs = disturbances(sys);
        implicit_dae       = false,
        simplify           = false,
    )

For a system sys with inputs (as determined by unbound_inputs or user specified), generate functions with additional input argument u

The returned functions are the out-of-place (f_oop) and in-place (f_ip) forms:

f_oop : (x,u,p,t)      -> rhs
f_ip  : (xout,x,u,p,t) -> nothing

The return values also include the chosen state-realization (the remaining unknowns) x_sym and parameters, in the order they appear as arguments to f.

If disturbance_inputs is an array of variables, the generated dynamics function will preserve any state and dynamics associated with disturbance inputs, but the disturbance inputs themselves will (by default) not be included as inputs to the generated function. The use case for this is to generate dynamics for state observers that estimate the influence of unmeasured disturbances, and thus require unknown variables for the disturbance model, but without disturbance inputs since the disturbances are not available for measurement. To add an input argument corresponding to the disturbance inputs, either include the disturbance inputs among the control inputs, or set disturbance_argument=true, in which case an additional input argument w is added to the generated function (x,u,p,t,w)->rhs.

Example

using ModelingToolkit: generate_control_function, varmap_to_vars, defaults
f, x_sym, ps = generate_control_function(sys, expression=Val{false}, simplify=false)
p = varmap_to_vars(defaults(sys), ps)
x = varmap_to_vars(defaults(sys), x_sym)
t = 0
f[1](x, inputs, p, t)
source
ModelingToolkit.generate_update_AFunction
generate_update_A(
    sys::System,
    A::AbstractMatrix;
    expression,
    wrap_gfw,
    eval_expression,
    eval_module,
    kwargs...
) -> Union{Expr, Tuple{Expr, Expr}}

Given a system sys and the A from calculate_A_b generate the function that updates A given the parameter object.

Keyword arguments

  • expression: Val{true} if this should return an Expr (or tuple of Exprs) of the generated code. Val{false} otherwise.
  • wrap_gfw: Val{true} if the returned functions should be wrapped in a callable struct to make them callable using the expected syntax. The callable struct itself is internal API. If expression == Val{true}, the returned expression will construct the callable struct. If this function returns a tuple of functions/expressions, both will be identical if wrap_gfw == Val{true}.
  • eval_expression: Whether to compile any functions via eval or RuntimeGeneratedFunctions.
  • eval_module: If eval_expression == true, the module to eval into. Otherwise, the module in which to generate the RuntimeGeneratedFunction.

All other keyword arguments are forwarded to build_function_wrapper.

source
ModelingToolkit.generate_update_bFunction
generate_update_b(
    sys::System,
    b::AbstractVector;
    expression,
    wrap_gfw,
    eval_expression,
    eval_module,
    kwargs...
) -> Union{Expr, Tuple{Expr, Expr}}

Given a system sys and the b from calculate_A_b generate the function that updates b given the parameter object.

Keyword arguments

  • expression: Val{true} if this should return an Expr (or tuple of Exprs) of the generated code. Val{false} otherwise.
  • wrap_gfw: Val{true} if the returned functions should be wrapped in a callable struct to make them callable using the expected syntax. The callable struct itself is internal API. If expression == Val{true}, the returned expression will construct the callable struct. If this function returns a tuple of functions/expressions, both will be identical if wrap_gfw == Val{true}.
  • eval_expression: Whether to compile any functions via eval or RuntimeGeneratedFunctions.
  • eval_module: If eval_expression == true, the module to eval into. Otherwise, the module in which to generate the RuntimeGeneratedFunction.

All other keyword arguments are forwarded to build_function_wrapper.

source

For functions such as jacobian calculation which require symbolic computation, there are calculate_* equivalents to obtain the symbolic result without building a function.

ModelingToolkit.calculate_tgradFunction
calculate_tgrad(sys::System; simplify) -> Any

Calculate the gradient of the equations of sys with respect to the independent variable. simplify is forwarded to Symbolics.expand_derivatives.

source
ModelingToolkit.calculate_jacobianFunction
calculate_jacobian(
    sys::System;
    sparse,
    simplify,
    dvs
) -> Any

Calculate the jacobian of the equations of sys.

Keyword arguments

  • simplify, sparse: Forwarded to Symbolics.jacobian.
  • dvs: The variables with respect to which the jacobian should be computed.
source
Symbolics.jacobian_sparsityFunction
jacobian_sparsity(
    sys::System
) -> SparseArrays.SparseMatrixCSC{Bool, Int64}

Return the sparsity pattern of the jacobian of sys as a matrix.

source
ModelingToolkit.calculate_hessianFunction
calculate_hessian(sys::System; simplify, sparse) -> Any

Return an array of symbolic hessians corresponding to the equations of the system.

Keyword Arguments

  • sparse: Controls whether the symbolic hessians are sparse matrices
  • simplify: Forwarded to Symbolics.hessian
source
ModelingToolkit.calculate_massmatrixFunction
calculate_massmatrix(sys::System; simplify) -> Any

Calculate the mass matrix of sys. simplify controls whether Symbolics.simplify is applied to the symbolic mass matrix. Returns a Diagonal or LinearAlgebra.I wherever possible.

source
ModelingToolkit.calculate_W_prototypeFunction
calculate_W_prototype(W_sparsity; u0, sparse) -> Any

Return the matrix to use as the jacobian prototype given the W-sparsity matrix of the system. This is not the same as the jacobian sparsity pattern.

Keyword arguments

  • u0: The u0 vector for the problem.
  • sparse: The prototype is nothing for non-sparse matrices.
source
ModelingToolkit.calculate_cost_gradientFunction
calculate_cost_gradient(sys::System; simplify) -> Any

Calculate the gradient of the consolidated cost of sys with respect to the unknowns. simplify is forwarded to Symbolics.gradient.

source
ModelingToolkit.calculate_cost_hessianFunction
calculate_cost_hessian(
    sys::System;
    sparse,
    simplify
) -> Union{SparseArrays.SparseMatrixCSC{Float64, Int64}, Matrix{Num}}

Calculate the hessian of the consolidated cost of sys with respect to the unknowns. simplify is forwarded to Symbolics.hessian. sparse controls whether a sparse matrix is returned.

source
ModelingToolkit.cost_hessian_sparsityFunction
cost_hessian_sparsity(
    sys::System
) -> Union{SparseArrays.SparseMatrixCSC{Float64, Int64}, Matrix{Float64}}

Return the sparsity pattern for the hessian of the cost function of sys.

source
ModelingToolkit.calculate_constraint_jacobianFunction
calculate_constraint_jacobian(
    sys::System;
    simplify,
    sparse,
    return_sparsity
) -> Any

Return the jacobian of the constraints of sys with respect to unknowns.

Keyword arguments

  • simplify, sparse: Forwarded to Symbolics.jacobian.
  • return_sparsity: Whether to also return the sparsity pattern of the jacobian.
source
ModelingToolkit.calculate_constraint_hessianFunction
calculate_constraint_hessian(
    sys::System;
    simplify,
    sparse,
    return_sparsity
) -> Any

Return the hessian of the constraints of sys with respect to unknowns.

Keyword arguments

  • simplify, sparse: Forwarded to Symbolics.hessian.
  • return_sparsity: Whether to also return the sparsity pattern of the hessian.
source
ModelingToolkit.calculate_control_jacobianFunction
calculate_control_jacobian(
    sys::ModelingToolkit.AbstractSystem;
    sparse,
    simplify
) -> Any

Calculate the jacobian of the equations of sys with respect to the inputs.

Keyword arguments

  • simplify, sparse: Forwarded to Symbolics.jacobian.
source
ModelingToolkit.calculate_A_bFunction
calculate_A_b(
    sys::System;
    sparse
) -> Tuple{Union{SparseArrays.SparseMatrixCSC{Any, Int64}, Matrix{Any}}, Any}

Return matrix A and vector b such that the system sys can be represented as A * x = b where x is unknowns(sys). Errors if the system is not affine.

Keyword arguments

  • sparse: return a sparse A.
source

All code generation eventually calls build_function_wrapper.

Missing docstring.

Missing docstring for build_function_wrapper. Check Documenter's build log for details.