diff --git a/src/linearization.jl b/src/linearization.jl index 3c11484d61..0e944f77d4 100644 --- a/src/linearization.jl +++ b/src/linearization.jl @@ -501,9 +501,9 @@ where `x` are differential unknown variables, `z` algebraic variables, `u` input """ function linearize_symbolic(sys::AbstractSystem, inputs, outputs; simplify = false, allow_input_derivatives = false, - eval_expression = false, eval_module = @__MODULE__, + eval_expression = false, eval_module = @__MODULE__, split = true, kwargs...) - sys = mtkcompile(sys; inputs, outputs, simplify, kwargs...) + sys = mtkcompile(sys; inputs, outputs, simplify, split, kwargs...) diff_idxs, alge_idxs = eq_idxs(sys) sts = unknowns(sys) t = get_iv(sys) @@ -512,10 +512,15 @@ function linearize_symbolic(sys::AbstractSystem, inputs, fun_expr = generate_rhs(sys; expression = Val{true})[1] fun = eval_or_rgf(fun_expr; eval_expression, eval_module) - dx = fun(sts, p, t) - + h = build_explicit_observed_function(sys, outputs; eval_expression, eval_module) - y = h(sts, p, t) + if split + dx = fun(sts, p, t) + y = h(sts, p, t) + else + dx = fun(sts, p..., t) + y = h(sts, p..., t) + end fg_xz = Symbolics.jacobian(dx, sts) fg_u = Symbolics.jacobian(dx, inputs) diff --git a/test/linearize.jl b/test/linearize.jl index 18fd3bb60d..c37529b885 100644 --- a/test/linearize.jl +++ b/test/linearize.jl @@ -120,7 +120,9 @@ lsys2 = ModelingToolkit.reorder_unknowns(lsys1, unknowns(ssys), desired_order) @test lsys.D[] == lsys2.D[] == 0 ## Symbolic linearization +lsyss_ns, ssys_ns = ModelingToolkit.linearize_symbolic(cl, [f.u], [p.x], split=false) lsyss, ssys = ModelingToolkit.linearize_symbolic(cl, [f.u], [p.x]) +@test isequal(lsyss.A, lsyss_ns.A) lsyss = ModelingToolkit.reorder_unknowns(lsyss, unknowns(ssys), [f.x, p.x]) @test ModelingToolkit.fixpoint_sub(lsyss.A, ModelingToolkit.defaults(cl)) == lsys.A