@@ -13,18 +13,20 @@ eqs = [u ~ kp * (r - y)
1313       y ~  x]
1414
1515@named  sys =  ODESystem (eqs, t)
16+ sys1 =  structural_simplify (sys, inputs =  [r], outputs =  [y])
1617
17- lsys, ssys  =  linearize (sys, [r], [y] )
18- lprob =  LinearizationProblem (sys, [r], [y] )
18+ lsys  =  linearize (sys1 )
19+ lprob =  LinearizationProblem (sys1 )
1920lsys2 =  solve (lprob)
20- lsys3, _  =  linearize (sys, [r], [y] ; autodiff =  AutoFiniteDiff ())
21+ lsys3  =  linearize (sys1 ; autodiff =  AutoFiniteDiff ())
2122
2223@test  lsys. A[] ==  lsys2. A[] ==  lsys3. A[] ==  - 2 
2324@test  lsys. B[] ==  lsys2. B[] ==  lsys3. B[] ==  1 
2425@test  lsys. C[] ==  lsys2. C[] ==  lsys3. C[] ==  1 
2526@test  lsys. D[] ==  lsys2. D[] ==  lsys3. D[] ==  0 
2627
27- lsys =  linearize (sys, [r], [r])
28+ sys2 =  structural_simplify (sys, inputs =  [r], outputs =  [r])
29+ lsys =  linearize (sys2)
2830
2931@test  lsys. A[] ==  - 2 
3032@test  lsys. B[] ==  1 
@@ -86,8 +88,9 @@ connections = [f.y ~ c.r # filtered reference to controller reference
8688               p. y ~  c. y]
8789
8890@named  cl =  ODESystem (connections, t, systems =  [f, c, p])
91+ cl =  structural_simplify (cl, inputs =  [f. u], outputs =  [p. x])
8992
90- lsys0 =  linearize (cl, [f . u], [p . x] )
93+ lsys0 =  linearize (cl)
9194desired_order =  [f. x, p. x]
9295lsys =  ModelingToolkit. reorder_unknowns (lsys0, unknowns (cl), desired_order)
9396lsys1 =  linearize (cl, [f. u], [p. x]; autodiff =  AutoFiniteDiff ())
@@ -99,7 +102,7 @@ lsys2 = ModelingToolkit.reorder_unknowns(lsys1, unknowns(cl), desired_order)
99102@test  lsys. D[] ==  lsys2. D[] ==  0 
100103
101104# # Symbolic linearization
102- lsyss =  ModelingToolkit. linearize_symbolic (cl, [f . u], [p . x] )
105+ lsyss =  ModelingToolkit. linearize_symbolic (cl)
103106
104107@test  ModelingToolkit. fixpoint_sub (lsyss. A, ModelingToolkit. defaults (cl)) ==  lsys. A
105108@test  ModelingToolkit. fixpoint_sub (lsyss. B, ModelingToolkit. defaults (cl)) ==  lsys. B
@@ -114,19 +117,18 @@ Nd = 10
114117@named  pid =  LimPID (; k, Ti, Td, Nd)
115118
116119@unpack  reference, measurement, ctr_output =  pid
117- pid =  structural_simplify (pid, inputs =  [reference. u, measurement. u], outputs =  [ctr_output. u])
118- lsys0 =  linearize (pid, [reference. u, measurement. u], [ctr_output. u];
119-     op =  Dict (reference. u =>  0.0 , measurement. u =>  0.0 ))
120- @unpack  int, der =  pid
120+ pid_s =  structural_simplify (pid, inputs =  [reference. u, measurement. u], outputs =  [ctr_output. u])
121+ lsys0 =  linearize (pid_s; op =  Dict (reference. u =>  0.0 , measurement. u =>  0.0 ))
122+ @unpack  int, der =  pid_s
121123desired_order =  [int. x, der. x]
122- lsys =  ModelingToolkit. reorder_unknowns (lsys0, unknowns (pid ), desired_order)
124+ lsys =  ModelingToolkit. reorder_unknowns (lsys0, unknowns (pid_s ), desired_order)
123125
124126@test  lsys. A ==  [0  0 ; 0  - 10 ]
125127@test  lsys. B ==  [2  - 2 ; 10  - 10 ]
126128@test  lsys. C ==  [400  - 4000 ]
127129@test  lsys. D ==  [4400  - 4400 ]
128130
129- lsyss, _  =  ModelingToolkit. linearize_symbolic (pid , [reference. u, measurement. u],
131+ lsyss  =  ModelingToolkit. linearize_symbolic (pid_s , [reference. u, measurement. u],
130132    [ctr_output. u])
131133
132134@test  ModelingToolkit. fixpoint_sub (
@@ -139,7 +141,7 @@ lsyss, _ = ModelingToolkit.linearize_symbolic(pid, [reference.u, measurement.u],
139141    lsyss. D, ModelingToolkit. defaults_and_guesses (pid)) ==  lsys. D
140142
141143#  Test with the reverse desired unknown order as well to verify that similarity transform and reoreder_unknowns really works
142- lsys =  ModelingToolkit. reorder_unknowns (lsys, unknowns (pid ), reverse (desired_order))
144+ lsys =  ModelingToolkit. reorder_unknowns (lsys, unknowns (pid_s ), reverse (desired_order))
143145
144146@test  lsys. A ==  [- 10  0 ; 0  0 ]
145147@test  lsys. B ==  [10  - 10 ; 2  - 2 ]
@@ -148,17 +150,17 @@ lsys = ModelingToolkit.reorder_unknowns(lsys, unknowns(pid), reverse(desired_ord
148150
149151# # Test that there is a warning when input is misspecified
150152if  VERSION  >=  v " 1.8" 
151-     @test_throws  " Some parameters are missing from the variable map. "   linearize (pid,
153+     @test_throws  " Some specified inputs were not found in system. The following variables were not found  "   structural_simplify (pid, inputs  =   
152154        [
153155            pid. reference. u,
154156            pid. measurement. u
155-         ],  [ctr_output. u])
156-     @test_throws  " Some parameters are missing from the variable map ."   linearize (pid,
157-         [
157+            ], outputs  =  [ctr_output. u])
158+     @test_throws  " Some specified outputs were not found in system ."   structural_simplify (pid,
159+         inputs  =   [
158160            reference. u,
159161            measurement. u
160162        ],
161-         [pid. ctr_output. u])
163+         outputs  =   [pid. ctr_output. u])
162164else  #  v1.6 does not have the feature to match error message
163165    @test_throws  ErrorException linearize (pid,
164166        [
@@ -200,7 +202,7 @@ lsys = linearize(sat, [u], [y])
200202#  @test substitute(lsyss.D, ModelingToolkit.defaults(sat)) == lsys.D
201203
202204#  outside the linear region the derivative is 0
203- lsys, ssys  =  linearize (sat, [u], [y]; op =  Dict (u =>  2 ))
205+ lsys =  linearize (sat, [u], [y]; op =  Dict (u =>  2 ))
204206@test  isempty (lsys. A) #  there are no differential variables in this system
205207@test  isempty (lsys. B)
206208@test  isempty (lsys. C)
@@ -306,12 +308,12 @@ m_ss = 2.4000000003229878
306308eqs =  [D (x) ~  p *  u, x ~  y]
307309@named  sys =  ODESystem (eqs, t)
308310
309- matrices1, _  =  linearize (sys, [u], []; op =  Dict (x =>  2.0 ))
310- matrices2, _  =  linearize (sys, [u], []; op =  Dict (y =>  2.0 ))
311+ matrices1 =  linearize (sys, [u], []; op =  Dict (x =>  2.0 ))
312+ matrices2 =  linearize (sys, [u], []; op =  Dict (y =>  2.0 ))
311313@test  matrices1 ==  matrices2
312314
313315#  Ensure parameter values passed as `Dict` are respected
314- linfun, _  =  linearization_function (sys, [u], []; op =  Dict (x =>  2.0 ))
316+ linfun =  linearization_function (sys, [u], []; op =  Dict (x =>  2.0 ))
315317matrices =  linfun ([1.0 ], Dict (p =>  3.0 ), 1.0 )
316318#  this would be 1 if the parameter value isn't respected
317319@test  matrices. f_u[] ==  3.0 
@@ -327,26 +329,28 @@ end
327329    @parameters  p
328330    eqs =  [0  ~  x *  log (y) -  p]
329331    @named  sys =  ODESystem (eqs, t; defaults =  [p =>  1.0 ])
330-     sys =  complete (sys)
332+     sys =  structural_simplify (sys, inputs  =  [x] )
331333    @test_throws  ModelingToolkit. MissingVariablesError linearize (
332-         sys, [x], [] ; op =  Dict (x =>  1.0 ), allow_input_derivatives =  true )
334+         sys; op =  Dict (x =>  1.0 ), allow_input_derivatives =  true )
333335    @test_nowarn  linearize (
334-         sys, [x], [] ; op =  Dict (x =>  1.0 ), guesses =  Dict (y =>  1.0 ),
336+         sys; op =  Dict (x =>  1.0 ), guesses =  Dict (y =>  1.0 ),
335337        allow_input_derivatives =  true )
336338end 
337339
338340@testset  " Symbolic values for parameters in `linearize`"   begin 
339341    @named  tank_noi =  Tank_noi ()
340342    @unpack  md_i, h, m, ρ, A, K =  tank_noi
343+     tank_noi =  structural_simplify (tank_noi, inputs =  [md_i], outputs =  [h])
341344    m_ss =  2.4000000003229878 
342345    @test_nowarn  linearize (
343-         tank_noi, [md_i], [h] ; op =  Dict (m =>  m_ss, md_i =>  2 , ρ =>  A /  K, A =>  5 ))
346+         tank_noi; op =  Dict (m =>  m_ss, md_i =>  2 , ρ =>  A /  K, A =>  5 ))
344347end 
345348
346349@testset  " Warn on empty operating point"   begin 
347350    @named  tank_noi =  Tank_noi ()
348351    @unpack  md_i, h, m =  tank_noi
352+     tank_noi =  structural_simplify (tank_noi, inputs =  [md_i], outputs =  [h])
349353    m_ss =  2.4000000003229878 
350354    @test_warn  [" empty operating point"  , " warn_empty_op"  ] linearize (
351-         tank_noi, [md_i], [h] ; p =  [md_i =>  1.0 ])
355+         tank_noi; p =  [md_i =>  1.0 ])
352356end 
0 commit comments