5151
5252get_value (interp:: Interpolator , t) = interp (t)
5353@register_symbolic get_value (interp:: Interpolator , t)
54- # get_value(data, t, dt) = data[round(Int, t / dt + 1)]
55- # @register_symbolic get_value(data::Vector, t, dt)
54+
55+ Symbolics . derivative ( :: typeof (get_value), args :: NTuple{2, Any} , :: Val{2} ) = 0
5656
5757function Sampled (; name, interp = Interpolator (Float64[], 0.0 ))
5858 pars = @parameters begin
@@ -68,11 +68,10 @@ function Sampled(; name, interp = Interpolator(Float64[], 0.0))
6868 output. u ~ get_value (interpolator, t)
6969 ]
7070
71- return ODESystem (eqs, t, vars, [interpolator]; name, systems,
72- defaults = [output. u => interp. data[1 ]])
71+ return ODESystem (eqs, t, vars, [interpolator]; name, systems)
7372end
7473
75- vars = @variables y (t)= 1 dy (t)= 0 ddy (t)= 0
74+ vars = @variables y (t) dy (t) ddy (t)
7675@named src = Sampled (; interp = Interpolator (x, dt))
7776@named int = Integrator ()
7877
@@ -84,11 +83,9 @@ eqs = [y ~ src.output.u
8483@named sys = ODESystem (eqs, t, vars, []; systems = [int, src])
8584s = complete (sys)
8685sys = structural_simplify (sys)
87- @test_broken ODEProblem (
88- sys, [], (0.0 , t_end), [s. src. interpolator => Interpolator (x, dt)]; tofloat = false )
8986prob = ODEProblem (
9087 sys, [], (0.0 , t_end), [s. src. interpolator => Interpolator (x, dt)];
91- tofloat = false , build_initializeprob = false )
88+ tofloat = false )
9289sol = solve (prob, ImplicitEuler ());
9390@test sol. retcode == ReturnCode. Success
9491@test sol[y][end ] == x[end ]
0 commit comments