11using ControlSystemsMTK,
2- ControlSystemsBase, ModelingToolkit, RobustAndOptimalControl
2+ ControlSystemsBase, ModelingToolkit, RobustAndOptimalControl, Test
33import ModelingToolkitStandardLibrary. Blocks as Blocks
44using OrdinaryDiffEqNonlinearSolve, OrdinaryDiffEqRosenbrock
5+ using LinearAlgebra
56conn = ModelingToolkit. connect
67connect = ModelingToolkit. connect
78# # Test SISO (single input, single output) system
@@ -40,33 +41,34 @@ sol2 = solve(prob, Rodas5())
4041isinteractive () && plot (sol2)
4142
4243Pc = complete (P)
43- Q = ControlSystemsMTK. build_quadratic_cost_matrix (Pc, [Pc. input. u], [Pc. x[1 ] => 2.0 ])
44+ op = Dict (Pc. input. u => 0.0 )
45+ Q = ControlSystemsMTK. build_quadratic_cost_matrix (Pc, [Pc. input. u], [Pc. x[1 ] => 2.0 ]; op)
4446@test Q[] ≈ 2.0
4547
46- Q = ControlSystemsMTK. build_quadratic_cost_matrix (Pc, [Pc. input. u], [Pc. output. u => 2.0 ])
48+ Q = ControlSystemsMTK. build_quadratic_cost_matrix (Pc, [Pc. input. u], [Pc. output. u => 2.0 ]; op )
4749@test Q[] ≈ 2.0
4850
4951# Mix states and outputs
50- Q = ControlSystemsMTK. build_quadratic_cost_matrix (Pc, [Pc. input. u], [Pc. x[1 ] => 2.0 , Pc. output. u => 3 ])
52+ Q = ControlSystemsMTK. build_quadratic_cost_matrix (Pc, [Pc. input. u], [Pc. x[1 ] => 2.0 , Pc. output. u => 3 ]; op )
5153@test Q[] ≈ 2.0 + 3
5254
53- matrices, ssys = linearize (Pc, [Pc. input. u], [Pc. output. u])
55+ matrices, ssys = linearize (Pc, [Pc. input. u], [Pc. output. u]; op )
5456
5557Q = ControlSystemsMTK. build_quadratic_cost_matrix (matrices, ssys, [Pc. x[1 ] => 2.0 ])
5658@test Q[] ≈ 2.0
5759
5860Q = ControlSystemsMTK. build_quadratic_cost_matrix (matrices, ssys, [Pc. output. u => 2.0 ])
5961@test Q[] ≈ 2.0
6062
61- P1 = ss (Pc, [Pc. input. u], [Pc. output. u])
63+ P1 = ss (Pc, [Pc. input. u], [Pc. output. u]; op )
6264@test P1 == P0
6365
6466
6567
6668# === Go the other way, ODESystem -> StateSpace ================================
6769x = unknowns (P) # I haven't figured out a good way to access states, so this is a bit manual and ugly
6870@unpack input, output = P
69- P02_named = named_ss (P, [input. u], [output. u])
71+ P02_named = named_ss (P, [input. u], [output. u]; op )
7072@test P02_named. x == [Symbol (" (x(t))[1]" )]
7173@test P02_named. u == [Symbol (" input₊u(t)" )]
7274@test P02_named. y == [Symbol (" output₊u(t)" )]
@@ -76,7 +78,7 @@ P02 = ss(P02_named)
7678
7779# same for controller
7880x = unknowns (C)
79- @nonamespace C02 = named_ss (C, [C. input], [C. output])
81+ @nonamespace C02 = named_ss (C, [C. input], [C. output]; op )
8082@test ss (C02) == C0
8183
8284
216218
217219model = SystemModel () |> complete
218220
219- lsys = named_ss (model, [model. torque. tau. u], [model. inertia1. phi, model. inertia2. phi])
221+ op = Dict (model. inertia1. flange_b. phi => 0.0 , model. torque. tau. u => 0 )
222+ lsys = named_ss (model, [model. torque. tau. u], [model. inertia1. phi, model. inertia2. phi]; op)
220223@test - 1000 ∈ lsys. A
221224@test - 10 ∈ lsys. A
222225@test 1000 ∈ lsys. A
@@ -376,7 +379,7 @@ Gb = minreal(Gb, 1e-8)
376379@test minimum (abs, tzeros (Gb) .- z) < sqrt (eps ())
377380
378381w = exp10 .(LinRange (- 12 , 2 , 2000 ))
379- ControlSystemsBase. bodeplot ([G, G2, minreal (G, 1e-8 )], w)
382+ # ControlSystemsBase.bodeplot([G, G2, minreal(G, 1e-8)], w)
380383
381384
382385# #
0 commit comments