Skip to content

Commit af3ae69

Browse files
committed
Fix broken Liouville transform test/documentation
1 parent 865ef02 commit af3ae69

File tree

2 files changed

+27
-41
lines changed

2 files changed

+27
-41
lines changed

src/systems/diffeqs/basic_transformations.jl

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,26 +14,20 @@ the final value of `trJ` is the probability of ``u(t)``.
1414
Example:
1515
1616
```julia
17-
using ModelingToolkit, OrdinaryDiffEq, Test
17+
using ModelingToolkit, OrdinaryDiffEq
1818
1919
@independent_variables t
2020
@parameters α β γ δ
2121
@variables x(t) y(t)
2222
D = Differential(t)
23+
eqs = [D(x) ~ α*x - β*x*y, D(y) ~ -δ*y + γ*x*y]
24+
@named sys = ODESystem(eqs, t)
2325
24-
eqs = [D(x) ~ α*x - β*x*y,
25-
D(y) ~ -δ*y + γ*x*y]
26-
27-
sys = ODESystem(eqs)
2826
sys2 = liouville_transform(sys)
29-
@variables trJ
30-
31-
u0 = [x => 1.0,
32-
y => 1.0,
33-
trJ => 1.0]
34-
35-
prob = ODEProblem(complete(sys2),u0,tspan,p)
36-
sol = solve(prob,Tsit5())
27+
sys2 = complete(sys2)
28+
u0 = [x => 1.0, y => 1.0, sys2.trJ => 1.0]
29+
prob = ODEProblem(sys2, u0, tspan, p)
30+
sol = solve(prob, Tsit5())
3731
```
3832
3933
Where `sol[3,:]` is the evolution of `trJ` over time.
@@ -46,14 +40,14 @@ Optimal Transport Approach
4640
Abhishek Halder, Kooktae Lee, and Raktim Bhattacharya
4741
https://abhishekhalder.bitbucket.io/F16ACC2013Final.pdf
4842
"""
49-
function liouville_transform(sys::AbstractODESystem)
43+
function liouville_transform(sys::AbstractODESystem; kwargs...)
5044
t = get_iv(sys)
5145
@variables trJ
5246
D = ModelingToolkit.Differential(t)
5347
neweq = D(trJ) ~ trJ * -tr(calculate_jacobian(sys))
5448
neweqs = [equations(sys); neweq]
5549
vars = [unknowns(sys); trJ]
56-
ODESystem(neweqs, t, vars, parameters(sys), checks = false)
50+
ODESystem(neweqs, t, vars, parameters(sys); checks = false, name = nameof(sys), kwargs...)
5751
end
5852

5953
function change_independent_variable(sys::AbstractODESystem, iv, eq = nothing; verbose = false, kwargs...)

test/basic_transformations.jl

Lines changed: 18 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,29 @@
11
using ModelingToolkit, OrdinaryDiffEq, Test
22

33
@independent_variables t
4-
@parameters α β γ δ
5-
@variables x(t) y(t)
64
D = Differential(t)
75

8-
eqs = [D(x) ~ α * x - β * x * y,
9-
D(y) ~ -δ * y + γ * x * y]
6+
@testset "Liouville transform" begin
7+
@parameters α β γ δ
8+
@variables x(t) y(t)
9+
eqs = [D(x) ~ α * x - β * x * y, D(y) ~ -δ * y + γ * x * y]
10+
@named sys = ODESystem(eqs, t)
11+
sys = complete(sys)
1012

11-
sys = ODESystem(eqs)
13+
u0 = [x => 1.0, y => 1.0]
14+
p ==> 1.5, β => 1.0, δ => 3.0, γ => 1.0]
15+
tspan = (0.0, 10.0)
16+
prob = ODEProblem(sys, u0, tspan, p)
17+
sol = solve(prob, Tsit5())
1218

13-
u0 = [x => 1.0,
14-
y => 1.0]
19+
sys2 = liouville_transform(sys)
20+
sys2 = complete(sys2)
1521

16-
p ==> 1.5,
17-
β => 1.0,
18-
δ => 3.0,
19-
γ => 1.0]
20-
21-
tspan = (0.0, 10.0)
22-
prob = ODEProblem(sys, u0, tspan, p)
23-
sol = solve(prob, Tsit5())
24-
25-
sys2 = liouville_transform(sys)
26-
@variables trJ
27-
28-
u0 = [x => 1.0,
29-
y => 1.0,
30-
trJ => 1.0]
31-
32-
prob = ODEProblem(sys2, u0, tspan, p, jac = true)
33-
sol = solve(prob, Tsit5())
34-
@test sol[end, end] 1.0742818931017244
22+
u0 = [x => 1.0, y => 1.0, sys2.trJ => 1.0]
23+
prob = ODEProblem(sys2, u0, tspan, p, jac = true)
24+
sol = solve(prob, Tsit5())
25+
@test sol[end, end] 1.0742818931017244
26+
end
3527

3628
@testset "Change independent variable" begin
3729
@independent_variables t

0 commit comments

Comments
 (0)