Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/linearization.jl
Original file line number Diff line number Diff line change
Expand Up @@ -505,7 +505,7 @@ function linearize_symbolic(sys::AbstractSystem, inputs,
ps = parameters(sys; initial_parameters = true)
p = reorder_parameters(sys, ps)

fun_expr = generate_function(sys, sts, ps; expression = Val{true})[1]
fun_expr = generate_rhs(sys; expression = Val{true})[1]
fun = eval_or_rgf(fun_expr; eval_expression, eval_module)
dx = fun(sts, p, t)

Expand Down
4 changes: 2 additions & 2 deletions src/systems/analysis_points.jl
Original file line number Diff line number Diff line change
Expand Up @@ -974,8 +974,8 @@ end
function linearization_function(sys::AbstractSystem,
inputs::Union{Symbol, Vector{Symbol}, AnalysisPoint, Vector{AnalysisPoint}},
outputs; loop_openings = [], system_modifier = identity, kwargs...)

sys, input_vars, output_vars = linearization_ap_transform(sys, inputs, outputs, loop_openings)
sys, input_vars, output_vars = linearization_ap_transform(
sys, inputs, outputs, loop_openings)
return linearization_function(system_modifier(sys), input_vars, output_vars; kwargs...)
end

Expand Down
44 changes: 17 additions & 27 deletions test/downstream/linearize.jl → test/linearize.jl
Original file line number Diff line number Diff line change
Expand Up @@ -87,10 +87,10 @@ connections = [f.y ~ c.r # filtered reference to controller reference

@named cl = System(connections, t, systems = [f, c, p])

lsys0, ssys = linearize(cl)
lsys0, ssys = linearize(cl, [f.u], [p.x])
desired_order = [f.x, p.x]
lsys = ModelingToolkit.reorder_unknowns(lsys0, unknowns(ssys), desired_order)
lsys1, ssys = linearize(cl; autodiff = AutoFiniteDiff())
lsys1, ssys = linearize(cl, [f.u], [p.x]; autodiff = AutoFiniteDiff())
lsys2 = ModelingToolkit.reorder_unknowns(lsys1, unknowns(ssys), desired_order)

@test lsys.A == lsys2.A == [-2 0; 1 -2]
Expand All @@ -99,8 +99,9 @@ lsys2 = ModelingToolkit.reorder_unknowns(lsys1, unknowns(ssys), desired_order)
@test lsys.D[] == lsys2.D[] == 0

## Symbolic linearization
lsyss, _ = ModelingToolkit.linearize_symbolic(cl, [f.u], [p.x])
lsyss, ssys = ModelingToolkit.linearize_symbolic(cl, [f.u], [p.x])

lsyss = ModelingToolkit.reorder_unknowns(lsyss, unknowns(ssys), [f.x, p.x])
@test ModelingToolkit.fixpoint_sub(lsyss.A, ModelingToolkit.defaults(cl)) == lsys.A
@test ModelingToolkit.fixpoint_sub(lsyss.B, ModelingToolkit.defaults(cl)) == lsys.B
@test ModelingToolkit.fixpoint_sub(lsyss.C, ModelingToolkit.defaults(cl)) == lsys.C
Expand Down Expand Up @@ -147,28 +148,17 @@ lsys = ModelingToolkit.reorder_unknowns(lsys, desired_order, reverse(desired_ord
@test lsys.D == [4400 -4400]

## Test that there is a warning when input is misspecified
if VERSION >= v"1.8"
@test_throws "Some specified inputs were not found" linearize(pid,
[
pid.reference.u,
pid.measurement.u
], [ctr_output.u])
@test_throws "Some specified outputs were not found" linearize(pid,
[
reference.u,
measurement.u
],
[pid.ctr_output.u])
else # v1.6 does not have the feature to match error message
@test_throws ErrorException linearize(pid,
[
pid.reference.u,
pid.measurement.u
], [ctr_output.u])
@test_throws ErrorException linearize(pid,
[reference.u, measurement.u],
[pid.ctr_output.u])
end
@test_throws "Some specified inputs were not found" linearize(pid,
[
pid.reference.u,
pid.measurement.u
], [ctr_output.u])
@test_throws "Some specified outputs were not found" linearize(pid,
[
reference.u,
measurement.u
],
[pid.ctr_output.u])

## Test operating points

Expand Down Expand Up @@ -266,7 +256,7 @@ closed_loop = System(connections, t, systems = [model, pid, filt, sensor, r, er]
filt.xd => 0.0
])

@test_nowarn linearize(closed_loop; warn_empty_op = false)
@test_nowarn linearize(closed_loop, :r, :y; warn_empty_op = false)

# https://discourse.julialang.org/t/mtk-change-in-linearize/115760/3
@mtkmodel Tank_noi begin
Expand Down Expand Up @@ -327,7 +317,7 @@ end
eqs = [0 ~ x * log(y) - p]
@named sys = System(eqs, t; defaults = [p => 1.0])
sys = complete(sys)
@test_throws ModelingToolkit.MissingVariablesError linearize(
@test_throws ModelingToolkit.MissingGuessError linearize(
sys, [x], []; op = Dict(x => 1.0), allow_input_derivatives = true)
@test_nowarn linearize(
sys, [x], []; op = Dict(x => 1.0), guesses = Dict(y => 1.0),
Expand Down
2 changes: 1 addition & 1 deletion test/runtests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ end
@safetestset "Debugging Test" include("debugging.jl")
@safetestset "Namespacing test" include("namespacing.jl")
@safetestset "Subsystem replacement" include("substitute_component.jl")
@safetestset "Linearization Tests" include("linearize.jl")
end
end

Expand All @@ -120,7 +121,6 @@ end

if GROUP == "All" || GROUP == "Downstream"
activate_downstream_env()
@safetestset "Linearization Tests" include("downstream/linearize.jl")
@safetestset "Linearization Dummy Derivative Tests" include("downstream/linearization_dd.jl")
@safetestset "Inverse Models Test" include("downstream/inversemodel.jl")
@safetestset "Analysis Points Test" include("downstream/analysis_points.jl")
Expand Down
Loading