Skip to content

Commit 4afaebb

Browse files
Merge pull request SciML#3968 from SciML/baggepinnen-patch-9
Handle `split` in `linearize_symbolic`
2 parents 2ce97c8 + 8feaf4c commit 4afaebb

File tree

2 files changed

+12
-5
lines changed

2 files changed

+12
-5
lines changed

src/linearization.jl

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -501,9 +501,9 @@ where `x` are differential unknown variables, `z` algebraic variables, `u` input
501501
"""
502502
function linearize_symbolic(sys::AbstractSystem, inputs,
503503
outputs; simplify = false, allow_input_derivatives = false,
504-
eval_expression = false, eval_module = @__MODULE__,
504+
eval_expression = false, eval_module = @__MODULE__, split = true,
505505
kwargs...)
506-
sys = mtkcompile(sys; inputs, outputs, simplify, kwargs...)
506+
sys = mtkcompile(sys; inputs, outputs, simplify, split, kwargs...)
507507
diff_idxs, alge_idxs = eq_idxs(sys)
508508
sts = unknowns(sys)
509509
t = get_iv(sys)
@@ -512,10 +512,15 @@ function linearize_symbolic(sys::AbstractSystem, inputs,
512512

513513
fun_expr = generate_rhs(sys; expression = Val{true})[1]
514514
fun = eval_or_rgf(fun_expr; eval_expression, eval_module)
515-
dx = fun(sts, p, t)
516-
515+
517516
h = build_explicit_observed_function(sys, outputs; eval_expression, eval_module)
518-
y = h(sts, p, t)
517+
if split
518+
dx = fun(sts, p, t)
519+
y = h(sts, p, t)
520+
else
521+
dx = fun(sts, p..., t)
522+
y = h(sts, p..., t)
523+
end
519524

520525
fg_xz = Symbolics.jacobian(dx, sts)
521526
fg_u = Symbolics.jacobian(dx, inputs)

test/linearize.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,9 @@ lsys2 = ModelingToolkit.reorder_unknowns(lsys1, unknowns(ssys), desired_order)
120120
@test lsys.D[] == lsys2.D[] == 0
121121

122122
## Symbolic linearization
123+
lsyss_ns, ssys_ns = ModelingToolkit.linearize_symbolic(cl, [f.u], [p.x], split=false)
123124
lsyss, ssys = ModelingToolkit.linearize_symbolic(cl, [f.u], [p.x])
125+
@test isequal(lsyss.A, lsyss_ns.A)
124126

125127
lsyss = ModelingToolkit.reorder_unknowns(lsyss, unknowns(ssys), [f.x, p.x])
126128
@test ModelingToolkit.fixpoint_sub(lsyss.A, ModelingToolkit.defaults(cl)) == lsys.A

0 commit comments

Comments
 (0)