File tree Expand file tree Collapse file tree 2 files changed +26
-0
lines changed Expand file tree Collapse file tree 2 files changed +26
-0
lines changed Original file line number Diff line number Diff line change @@ -204,6 +204,7 @@ function dynamics(b::Basis)
204204end
205205
206206function ModelingToolkit. ODESystem (b:: Basis )
207+ @assert length (b) == length (variables (b))
207208 # Define the time
208209 @parameters t
209210 @derivatives D' ~ t
@@ -217,3 +218,22 @@ function ModelingToolkit.ODESystem(b::Basis)
217218 eqs = dvs .~ b (vs, p = b. parameter)
218219 return ODESystem (eqs)
219220end
221+
222+ function ModelingToolkit. ODESystem (b:: Basis , independent_variable:: Operation )
223+ @assert length (b) == length (variables (b))- 1
224+ @derivatives D' ~ independent_variable
225+
226+ vars = [vi for vi in variables (b) if ! isequal (vi, independent_variable)]
227+
228+ vs = similar (vars)
229+ dvs = similar (vars)
230+
231+
232+ for (i, vi) in enumerate (vars)
233+ vs[i] = ModelingToolkit. Operation (vi. op, [independent_variable])
234+ dvs[i] = D (vs[i])
235+ end
236+
237+ eqs = dvs .~ b ([vs... , independent_variable], p = b. parameter)
238+ return ODESystem (eqs, independent_variable, vs, b. parameter)
239+ end
Original file line number Diff line number Diff line change @@ -53,6 +53,12 @@ using Test
5353 @test_nowarn sys = ODESystem (basis)
5454 @test_nowarn [xi for xi in basis]
5555 @test_nowarn basis[2 : end ]; basis[2 ]; first (basis); last (basis); basis[:]
56+
57+ @variables u[1 : 2 ] t
58+
59+ g = [u[2 ]; - sin (u[1 ])* exp (- t)]
60+ basis = Basis (g, [u... ; t])
61+ @test_nowarn ODESystem (basis, t)
5662end
5763
5864@testset " DMD" begin
You can’t perform that action at this time.
0 commit comments