Skip to content

Commit ebf08cd

Browse files
Merge pull request #96 from JuliaDiffEq/hg/feature/tvc
Introduce time-varying parameters
2 parents 14393d3 + 91fa47c commit ebf08cd

File tree

2 files changed

+15
-27
lines changed

2 files changed

+15
-27
lines changed

src/variables.jl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,11 @@ Base.:(==)(c::Constant, n::Number) = c.value == n
3030
Base.:(==)(n::Number, c::Constant) = c.value == n
3131
Base.:(==)(a::Constant, b::Constant) = a.value == b.value
3232

33-
Base.convert(::Type{Expr}, x::Variable) = x.name
33+
function Base.convert(::Type{Expr}, x::Variable)
34+
x.subtype === :Parameter || return x.name
35+
isempty(x.dependents) && return x.name
36+
return :($(x.name)($(convert.(Expr, x.dependents)...)))
37+
end
3438
Base.convert(::Type{Expr}, c::Constant) = c.value
3539

3640
Base.show(io::IO, x::Variable) = print(io, x.subtype, '(', x.name, ')')

test/system_construction.jl

Lines changed: 10 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -32,34 +32,18 @@ function test_vars_extraction(de, de2)
3232
end
3333
test_vars_extraction(de, de2)
3434

35-
# Time-varying parameters
36-
37-
@test_broken begin
38-
eqs = [D(x) ~ σ(t)*(y-x),
35+
@testset "time-varying parameters" begin
36+
@Param σ′(t)
37+
eqs = [D(x) ~ σ′*(y-x),
3938
D(y) ~ x*-z)-y,
4039
D(z) ~ x*y - β*z]
41-
de = DiffEqSystem(eqs,[t],[x,y,z],[σ,ρ,β])
42-
generate_function(de)
43-
44-
#=
45-
```julia
46-
:((du, u, p, t)->begin
47-
x = u[1]
48-
y = u[2]
49-
z = u[3]
50-
σ = p[1]
51-
ρ = p[2]
52-
β = p[3]
53-
x_t = σ(t) * (y - x)
54-
y_t = x * (ρ - z) - y
55-
z_t = x * y - β * z
56-
du[1] = x_t
57-
du[2] = y_t
58-
du[3] = z_t
59-
end
60-
end)
61-
```
62-
=#
40+
de = DiffEqSystem(eqs,t,[x,y,z],[σ′,ρ,β])
41+
@test begin
42+
f = eval(generate_function(de))
43+
du = [0.0,0.0,0.0]
44+
f(du, [1.0,2.0,3.0], [x->x+7,2,3], 5.0)
45+
du [12, -3, -7]
46+
end
6347
end
6448

6549
# Conversion to first-order ODEs #17

0 commit comments

Comments
 (0)