Skip to content

Commit dc8833f

Browse files
committed
provide some variables for operating points
1 parent 75d5545 commit dc8833f

File tree

1 file changed

+13
-10
lines changed

1 file changed

+13
-10
lines changed

test/test_ODESystem.jl

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
using ControlSystemsMTK,
2-
ControlSystemsBase, ModelingToolkit, RobustAndOptimalControl
2+
ControlSystemsBase, ModelingToolkit, RobustAndOptimalControl, Test
33
import ModelingToolkitStandardLibrary.Blocks as Blocks
44
using OrdinaryDiffEqNonlinearSolve, OrdinaryDiffEqRosenbrock
5+
using LinearAlgebra
56
conn = ModelingToolkit.connect
67
connect = ModelingToolkit.connect
78
## Test SISO (single input, single output) system
@@ -40,33 +41,34 @@ sol2 = solve(prob, Rodas5())
4041
isinteractive() && plot(sol2)
4142

4243
Pc = 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

5557
Q = ControlSystemsMTK.build_quadratic_cost_matrix(matrices, ssys, [Pc.x[1] => 2.0])
5658
@test Q[] 2.0
5759

5860
Q = 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 ================================
6769
x = 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
7880
x = 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

@@ -216,7 +218,8 @@ end
216218

217219
model = 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

378381
w = 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

Comments
 (0)