Skip to content

Commit 56d8cd6

Browse files
authored
Merge pull request #60 from JuliaDiffEq/basis_independent_var
Add independent variable for basis
2 parents 21e8959 + 0997939 commit 56d8cd6

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

src/basis.jl

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ function dynamics(b::Basis)
204204
end
205205

206206
function 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)
219220
end
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

test/runtests.jl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff 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)
5662
end
5763

5864
@testset "DMD" begin

0 commit comments

Comments
 (0)