Skip to content

Commit cf8b3a3

Browse files
fix: handle symbolic values for parameters passed to linearize
1 parent 2db7f5f commit cf8b3a3

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

src/linearization.jl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -590,9 +590,12 @@ function linearize(sys, lin_fun::LinearizationFunction; t = 0.0,
590590
p = DiffEqBase.NullParameters())
591591
prob = LinearizationProblem(lin_fun, t)
592592
op = anydict(op)
593-
evaluate_varmap!(op, unknowns(sys))
593+
evaluate_varmap!(op, keys(op))
594594
for (k, v) in op
595595
v === nothing && continue
596+
if symbolic_type(v) != NotSymbolic() || is_array_of_symbolics(v)
597+
v = getu(prob, v)(prob)
598+
end
596599
if is_parameter(prob, Initial(k))
597600
setu(prob, Initial(k))(prob, v)
598601
else

test/downstream/linearize.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,3 +329,11 @@ end
329329
sys, [x], []; op = Dict(x => 1.0), guesses = Dict(y => 1.0),
330330
allow_input_derivatives = true)
331331
end
332+
333+
@testset "Symbolic values for parameters in `linearize`" begin
334+
@named tank_noi = Tank_noi()
335+
@unpack md_i, h, m, ρ, A, K = tank_noi
336+
m_ss = 2.4000000003229878
337+
@test_nowarn linearize(
338+
tank_noi, [md_i], [h]; op = Dict(m => m_ss, md_i => 2, ρ => A / K, A => 5))
339+
end

0 commit comments

Comments
 (0)