Skip to content

Commit d0e4604

Browse files
Merge pull request #44 from JuliaDiffEq/modelingtoolkit
Replace ParameterizedFunctions with ModelingToolkit
2 parents 9104025 + d3bf327 commit d0e4604

File tree

4 files changed

+85
-52
lines changed

4 files changed

+85
-52
lines changed

Project.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,11 @@ DiffEqBiological = "eb300fae-53e8-50a0-950c-e21f52c2b7e0"
99
DiffEqOperators = "9fdde737-9c7f-55bf-ade8-46b3f136cc48"
1010
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
1111
Markdown = "d6f4376e-aef5-505a-96c1-9c027394607a"
12-
ParameterizedFunctions = "65888b18-ceab-5e60-b2b9-181511a3b968"
12+
ModelingToolkit = "961ee093-0014-501f-94e3-6117800e7a78"
1313
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
1414

1515
[compat]
1616
DiffEqBase = ">= 3.0.3"
17-
ParameterizedFunctions = ">= 4.0.0"
1817
julia = "1"
1918

2019
[extras]

src/ode/ode_premade_problems.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
using DiffEqBase, ParameterizedFunctions, DiffEqOperators, Random, LinearAlgebra
2-
using Markdown
1+
using DiffEqBase, DiffEqOperators, Random, LinearAlgebra
2+
using Markdown, ModelingToolkit
33

44
Random.seed!(100)
55

src/ode/ode_simple_nonlinear_prob.jl

Lines changed: 76 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
## Lotka-Volterra
22

3-
lotka = @ode_def_all LotkaVolterra begin
4-
dx = a*x - b*x*y
5-
dy = -c*y + d*x*y
6-
end a b c d
3+
function lotka(du,u,p,t)
4+
x = u[1]
5+
y = u[2]
6+
du[1] = p[1]*x - p[2]*x*y
7+
du[2] = -p[3]*y + p[4]*x*y
8+
end
79

810
"""
911
Lotka-Voltera Equations (Non-stiff)
@@ -19,10 +21,16 @@ prob_ode_lotkavoltera = ODEProblem(lotka,[1.0,1.0],(0.0,1.0),[1.5,1.0,3.0,1.0])
1921

2022
## Fitzhugh-Nagumo
2123

22-
fitz = @ode_def_all FitzhughNagumo begin
23-
dv = v - v^3/3 -w + l
24-
dw = τinv*(v + a - b*w)
25-
end a b τinv l
24+
function fitz(du,u,p,t)
25+
v = u[1]
26+
w = u[2]
27+
a = p[1]
28+
b = p[2]
29+
τinv = p[3]
30+
l = p[4]
31+
du[1] = v - v^3/3 -w + l
32+
du[2] = τinv*(v + a - b*w)
33+
end
2634
"""
2735
Fitzhugh-Nagumo (Non-stiff)
2836
@@ -35,11 +43,15 @@ with initial condition ``v=w=1``
3543
"""
3644
prob_ode_fitzhughnagumo = ODEProblem(fitz,[1.0;1.0],(0.0,1.0),(0.7,0.8,1/12.5,0.5))
3745

46+
3847
#Van der Pol Equations
39-
van = @ode_def_all VanDerPol begin
40-
dy = μ*((1-x^2)*y - x)
41-
dx = 1*y
42-
end μ
48+
@parameters t μ
49+
@variables x(t) y(t)
50+
@derivatives D'~t
51+
eqs = [D(x) ~ μ*((1-x^2)*y - x),
52+
D(y) ~ y]
53+
de = ODESystem(eqs)
54+
van = ODEFunction(de, [x,y], [μ], jac=true, Wfact=true)
4355

4456
"""
4557
Van der Pol Equations
@@ -73,12 +85,14 @@ Stiff parameters.
7385
prob_ode_vanstiff = ODEProblem(van,[0;sqrt(3)],(0.0,1.0),1e6)
7486

7587
# ROBER
76-
77-
rober = @ode_def_all Rober begin
78-
dy₁ = -k₁*y₁+k₃*y₂*y₃
79-
dy₂ = k₁*y₁-k₂*y₂^2-k₃*y₂*y₃
80-
dy₃ = k₂*y₂^2
81-
end k₁ k₂ k₃
88+
@parameters t k₁ k₂ k₃
89+
@variables y₁(t) y₂(t) y₃(t)
90+
@derivatives D'~t
91+
eqs = [D(y₁) ~ -k₁*y₁+k₃*y₂*y₃,
92+
D(y₂) ~ k₁*y₁-k₂*y₂^2-k₃*y₂*y₃,
93+
D(y₃) ~ k₂*y₂^2]
94+
de = ODESystem(eqs)
95+
rober = ODEFunction(de, [y₁,y₂,y₃], [k₁,k₂,k₃], jac=true, Wfact=true)
8296

8397
"""
8498
The Robertson biochemical reactions: (Stiff)
@@ -137,11 +151,14 @@ prob_ode_threebody = ODEProblem(threebody,[0.994, 0.0, 0.0, big(-2.0015851063790
137151

138152
# Rigid Body Equations
139153

140-
rigid = @ode_def_all RigidBody begin
141-
dy₁ = I₁*y₂*y₃
142-
dy₂ = I₂*y₁*y₃
143-
dy₃ = I₃*y₁*y₂
144-
end I₁ I₂ I₃
154+
@parameters t I₁ I₂ I₃
155+
@variables y₁(t) y₂(t) y₃(t)
156+
@derivatives D'~t
157+
eqs = [D(y₁) ~ I₁*y₂*y₃,
158+
D(y₂) ~ I₂*y₁*y₃,
159+
D(y₃) ~ I₃*y₁*y₂]
160+
de = ODESystem(eqs)
161+
rigid = ODEFunction(de, [y₁,y₂,y₃], [I₁,I₂,I₃], jac=true, Wfact=true)
145162

146163
"""
147164
Rigid Body Equations (Non-stiff)
@@ -251,6 +268,31 @@ const MM_linear =Matrix(Diagonal(0.5ones(4)))
251268
mm_f = ODEFunction(mm_linear;analytic = (u0,p,t) -> exp(inv(MM_linear)*mm_A*t)*u0, mass_matrix=MM_linear)
252269
prob_ode_mm_linear = ODEProblem(mm_f,rand(4),(0.0,1.0))
253270

271+
272+
273+
274+
275+
@parameters t p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12
276+
@variables y1(t) y2(t) y3(t) y4(t) y5(t) y6(t) y7(t) y8(t)
277+
@derivatives D'~t
278+
eqs = [D(y1) ~ -p1*y1 + p2*y2 + p3*y3 + p4,
279+
D(y2) ~ p1*y1 - p5*y2,
280+
D(y3) ~ -p6*y3 + p2*y4 + p7*y5,
281+
D(y4) ~ p3*y2 + p1*y3 - p8*y4,
282+
D(y5) ~ -p9*y5 + p2*y6 + p2*y7,
283+
D(y6) ~ -p10*y6*y8 + p11*y4 + p1*y5 -
284+
p2*y6 + p11*y7,
285+
D(y7) ~ p10*y6*y8 - p12*y7,
286+
D(y8) ~ -p10*y6*y8 + p12*y7]
287+
de = ODESystem(eqs)
288+
hires = ODEFunction(de, [y1,y2,y3,y4,y5,y6,y7,y8],
289+
[p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12],
290+
jac=true, Wfact=true)
291+
292+
u0 = zeros(8)
293+
u0[1] = 1
294+
u0[8] = 0.0057
295+
254296
"""
255297
[Hires Problem](http://nbviewer.jupyter.org/github/JuliaDiffEq/DiffEqBenchmarks.jl/blob/master/StiffODE/Hires.ipynb) (Stiff)
256298
@@ -276,24 +318,21 @@ f(y) = \\begin{pmatrix}
276318
277319
http://www.radford.edu/~thompson/vodef90web/problems/demosnodislin/Demos_Pitagora/DemoHires/demohires.pdf
278320
"""
279-
hires = @ode_def_all Hires begin
280-
dy1 = -p1*y1 + p2*y2 + p3*y3 + p4
281-
dy2 = p1*y1 - p5*y2
282-
dy3 = -p6*y3 + p2*y4 + p7*y5
283-
dy4 = p3*y2 + p1*y3 - p8*y4
284-
dy5 = -p9*y5 + p2*y6 + p2*y7
285-
dy6 = -p10*y6*y8 + p11*y4 + p1*y5 -
286-
p2*y6 + p11*y7
287-
dy7 = p10*y6*y8 - p12*y7
288-
dy8 = -p10*y6*y8 + p12*y7
289-
end p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12
290-
u0 = zeros(8)
291-
u0[1] = 1
292-
u0[8] = 0.0057
293321
prob_ode_hires = ODEProblem(hires,u0,(0.0,321.8122), (1.71, 0.43, 8.32, 0.0007, 8.75,
294322
10.03, 0.035, 1.12, 1.745, 280.0,
295323
0.69, 1.81))
296324

325+
@parameters t p1 p2 p3
326+
@variables y1(t) y2(t) y3(t)
327+
@derivatives D'~t
328+
eqs = [D(y1) ~ p1*(y2+y1*(1-p2*y1-y2)),
329+
D(y2) ~ (y3-(1+y1)*y2)/p1,
330+
D(y3) ~ p3*(y1-y3)]
331+
de = ODESystem(eqs)
332+
jac = calculate_jacobian(de)
333+
ModelingToolkit.calculate_factorized_W(de)
334+
orego = ODEFunction(de, [y1,y2,y3], [p1,p2,p3], jac=true, Wfact=true)
335+
297336
"""
298337
[Orego Problem](http://nbviewer.jupyter.org/github/JuliaDiffEq/DiffEqBenchmarks.jl/blob/master/StiffODE/Orego.ipynb) (Stiff)
299338
@@ -316,9 +355,4 @@ where ``s=77.27``, ``w=0.161`` and ``q=8.375⋅10^{-6}``.
316355
317356
http://www.radford.edu/~thompson/vodef90web/problems/demosnodislin/Demos_Pitagora/DemoOrego/demoorego.pdf
318357
"""
319-
orego = @ode_def_all Orego begin
320-
dy1 = p1*(y2+y1*(1-p2*y1-y2))
321-
dy2 = (y3-(1+y1)*y2)/p1
322-
dy3 = p3*(y1-y3)
323-
end p1 p2 p3
324358
prob_ode_orego = ODEProblem(orego,[1.0,2.0,3.0],(0.0,30.0),[77.27,8.375e-6,0.161])

src/sde_premade_problems.jl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using DiffEqBase, ParameterizedFunctions, DiffEqBiological, Markdown
1+
using DiffEqBase, DiffEqBiological, Markdown
22
#SDE Example Problems
33
export prob_sde_wave, prob_sde_linear, prob_sde_cubic, prob_sde_2Dlinear,
44
prob_sde_lorenz, prob_sde_2Dlinear, prob_sde_additive,
@@ -117,11 +117,11 @@ A multiple dimension extension of `additiveSDEExample`
117117
"""
118118
prob_sde_additivesystem = SDEProblem(ff_additive_iip,σ_additive_iip,[1.;1.;1.;1.],(0.0,1.0),p)
119119

120-
f_lorenz = @ode_def_bare LorenzSDE begin
121-
dx = σ*(y-x)
122-
dy = x*-z) - y
123-
dz = x*y - β*z
124-
end σ ρ β
120+
function f_lorenz(du,u,p,t)
121+
du[1] = p[1]*(u[2]-u[1])
122+
du[2] = u[1]*(p[2]-u[3]) - u[2]
123+
du[3] = u[1]*u[2] - p[3]*u[3]
124+
end
125125
σ_lorenz(du,u,p,t) = @.(du = 3.0)
126126
@doc doc"""
127127
Lorenz Attractor with additive noise

0 commit comments

Comments
 (0)