302302 return ODESystem (eqs, t, vars, params; systems, name)
303303 end
304304
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 )
306324 params = @parameters begin
307325 k (t) = x0
308326 T = T
@@ -316,14 +334,14 @@ end
316334 eqs = [D (x) ~ dx
317335 D (dx) ~ ddx
318336 dx ~ (k - x) / T
319- D (k) ~ 0 ]
337+ D (k) ~ missing ]
320338 return ODESystem (eqs, t, vars, params; systems, name)
321339 end
322340
323- @named sys = FilteredInput ()
341+ @named sys = FilteredInputErr ()
324342 @test_throws [" derivative of discrete variable" , " k(t)" ] structural_simplify (sys)
325343
326- @mtkbuild sys = FilteredInputFix ()
344+ @mtkbuild sys = FilteredInput ()
327345 vs = Set ()
328346 for eq in equations (sys)
329347 ModelingToolkit. vars! (vs, eq)
334352
335353 @test ! (D (sys. k) in vs)
336354
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+
337362 @testset " Called parameter still has derivative" begin
338363 @component function FilteredInput2 (; name, x0 = 0 , T = 0.1 )
339364 ts = collect (0.0 : 0.1 : 10.0 )
0 commit comments