302
302
return ODESystem (eqs, t, vars, params; systems, name)
303
303
end
304
304
305
- @component function FilteredInputFix (; name, x0 = 0 , T = 0.1 )
305
+ @component function FilteredInputExplicit (; name, x0 = 0 , T = 0.1 )
306
+ params = @parameters begin
307
+ k (t)[1 : 1 ] = [x0]
308
+ T = T
309
+ end
310
+ vars = @variables begin
311
+ x (t) = k
312
+ dx (t) = 0
313
+ ddx (t)
314
+ end
315
+ systems = []
316
+ eqs = [D (x) ~ dx
317
+ D (dx) ~ ddx
318
+ D (k[1 ]) ~ 1.0
319
+ dx ~ (k[1 ] - x) / T]
320
+ return ODESystem (eqs, t, vars, params; systems, name)
321
+ end
322
+
323
+ @component function FilteredInputErr (; name, x0 = 0 , T = 0.1 )
306
324
params = @parameters begin
307
325
k (t) = x0
308
326
T = T
@@ -316,14 +334,14 @@ end
316
334
eqs = [D (x) ~ dx
317
335
D (dx) ~ ddx
318
336
dx ~ (k - x) / T
319
- D (k) ~ 0 ]
337
+ D (k) ~ missing ]
320
338
return ODESystem (eqs, t, vars, params; systems, name)
321
339
end
322
340
323
- @named sys = FilteredInput ()
341
+ @named sys = FilteredInputErr ()
324
342
@test_throws [" derivative of discrete variable" , " k(t)" ] structural_simplify (sys)
325
343
326
- @mtkbuild sys = FilteredInputFix ()
344
+ @mtkbuild sys = FilteredInput ()
327
345
vs = Set ()
328
346
for eq in equations (sys)
329
347
ModelingToolkit. vars! (vs, eq)
334
352
335
353
@test ! (D (sys. k) in vs)
336
354
355
+ @mtkbuild sys = FilteredInputExplicit ()
356
+ obsfn1 = ModelingToolkit. build_explicit_observed_function (sys, sys. ddx)
357
+ obsfn2 = ModelingToolkit. build_explicit_observed_function (sys, sys. dx)
358
+ u = [1.0 ]
359
+ p = MTKParameters (sys, [sys. k => [2.0 ], sys. T => 3.0 ])
360
+ @test obsfn1 (u, p, 0.0 ) ≈ (1 - obsfn2 (u, p, 0.0 )) / 3.0
361
+
337
362
@testset " Called parameter still has derivative" begin
338
363
@component function FilteredInput2 (; name, x0 = 0 , T = 0.1 )
339
364
ts = collect (0.0 : 0.1 : 10.0 )
0 commit comments