@@ -160,12 +160,12 @@ eqs = [
160
160
]
161
161
162
162
@named sys = ODESystem (eqs, t)
163
- f, dvs, ps = ModelingToolkit. generate_control_function (sys, simplify = true )
163
+ f, dvs, ps, io_sys = ModelingToolkit. generate_control_function (sys, simplify = true )
164
164
165
165
@test isequal (dvs[], x)
166
166
@test isempty (ps)
167
167
168
- p = []
168
+ p = nothing
169
169
x = [rand ()]
170
170
u = [rand ()]
171
171
@test f[1 ](x, u, p, 1 ) == - x + u
@@ -221,10 +221,10 @@ eqs = [connect_sd(sd, mass1, mass2)
221
221
@named _model = ODESystem (eqs, t)
222
222
@named model = compose (_model, mass1, mass2, sd);
223
223
224
- f, dvs, ps = ModelingToolkit. generate_control_function (model, simplify = true )
224
+ f, dvs, ps, io_sys = ModelingToolkit. generate_control_function (model, simplify = true )
225
225
@test length (dvs) == 4
226
226
@test length (ps) == length (parameters (model))
227
- p = ModelingToolkit . varmap_to_vars (ModelingToolkit . defaults (model), ps )
227
+ p = MTKParameters (io_sys, [io_sys . u => NaN ] )
228
228
x = ModelingToolkit. varmap_to_vars (
229
229
merge (ModelingToolkit. defaults (model),
230
230
Dict (D .(unknowns (model)) .=> 0.0 )), dvs)
@@ -288,7 +288,7 @@ model_outputs = [model.inertia1.w, model.inertia2.w, model.inertia1.phi, model.i
288
288
@named dmodel = Blocks. StateSpace ([0.0 ], [1.0 ], [1.0 ], [0.0 ]) # An integrating disturbance
289
289
290
290
@named dist = ModelingToolkit. DisturbanceModel (model. torque. tau. u, dmodel)
291
- (f_oop, f_ip), outersys, dvs, p = ModelingToolkit. add_input_disturbance (model, dist)
291
+ (f_oop, f_ip), outersys, dvs, p, io_sys = ModelingToolkit. add_input_disturbance (model, dist)
292
292
293
293
@unpack u, d = outersys
294
294
matrices, ssys = linearize (outersys, [u, d], model_outputs)
@@ -302,7 +302,7 @@ x_add = ModelingToolkit.varmap_to_vars(merge(Dict(dvs .=> 0), Dict(dstate => 1))
302
302
x0 = randn (5 )
303
303
x1 = copy (x0) + x_add # add disturbance state perturbation
304
304
u = randn (1 )
305
- pn = ModelingToolkit . varmap_to_vars (def, p )
305
+ pn = MTKParameters (io_sys, [] )
306
306
xp0 = f_oop (x0, u, pn, 0 )
307
307
xp1 = f_oop (x1, u, pn, 0 )
308
308
401
401
f, dvs, ps = ModelingToolkit. generate_control_function (sys, simplify = true )
402
402
@test f[1 ]([0.5 ], nothing , nothing , 0.0 ) == [1.0 ]
403
403
end
404
+
405
+ @testset " With callable symbolic" begin
406
+ @variables x (t)= 0 u (t)= 0 [input = true ]
407
+ @parameters p (:: Real ) = (x -> 2 x)
408
+ eqs = [D (x) ~ - x + p (u)]
409
+ @named sys = ODESystem (eqs, t)
410
+ f, dvs, ps, io_sys = ModelingToolkit. generate_control_function (sys, simplify = true )
411
+ p = MTKParameters (io_sys, [])
412
+ u = [1.0 ]
413
+ x = [1.0 ]
414
+ @test_nowarn f[1 ](x, u, p, 0.0 )
415
+ end
0 commit comments