Skip to content

Commit 7716699

Browse files
Replace ParameterizedFunctions with ModelingToolkit
1 parent 9104025 commit 7716699

File tree

3 files changed

+89
-49
lines changed

3 files changed

+89
-49
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_simple_nonlinear_prob.jl

Lines changed: 83 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,17 @@ 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+
jac = calculate_jacobian(de)
55+
#ModelingToolkit.generate_factorized_W(de)
56+
van = ODEFunction(de, [x,y], [μ])
4357

4458
"""
4559
Van der Pol Equations
@@ -73,12 +87,16 @@ Stiff parameters.
7387
prob_ode_vanstiff = ODEProblem(van,[0;sqrt(3)],(0.0,1.0),1e6)
7488

7589
# 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₃
90+
@parameters t k₁ k₂ k₃
91+
@variables y₁(t) y₂(t) y₃(t)
92+
@derivatives D'~t
93+
eqs = [D(y₁) ~ -k₁*y₁+k₃*y₂*y₃,
94+
D(y₂) ~ k₁*y₁-k₂*y₂^2-k₃*y₂*y₃,
95+
D(y₃) ~ k₂*y₂^2]
96+
de = ODESystem(eqs)
97+
jac = calculate_jacobian(de)
98+
#ModelingToolkit.generate_factorized_W(de)
99+
rober = ODEFunction(de, [y₁,y₂,y₃], [k₁,k₂,k₃])
82100

83101
"""
84102
The Robertson biochemical reactions: (Stiff)
@@ -137,11 +155,16 @@ prob_ode_threebody = ODEProblem(threebody,[0.994, 0.0, 0.0, big(-2.0015851063790
137155

138156
# Rigid Body Equations
139157

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₃
158+
@parameters t I₁ I₂ I₃
159+
@variables y₁(t) y₂(t) y₃(t)
160+
@derivatives D'~t
161+
eqs = [D(y₁) ~ I₁*y₂*y₃,
162+
D(y₂) ~ I₂*y₁*y₃,
163+
D(y₃) ~ I₃*y₁*y₂]
164+
de = ODESystem(eqs)
165+
jac = calculate_jacobian(de)
166+
#ModelingToolkit.generate_factorized_W(de)
167+
rigid = ODEFunction(de, [y₁,y₂,y₃], [I₁,I₂,I₃])
145168

146169
"""
147170
Rigid Body Equations (Non-stiff)
@@ -251,6 +274,32 @@ const MM_linear =Matrix(Diagonal(0.5ones(4)))
251274
mm_f = ODEFunction(mm_linear;analytic = (u0,p,t) -> exp(inv(MM_linear)*mm_A*t)*u0, mass_matrix=MM_linear)
252275
prob_ode_mm_linear = ODEProblem(mm_f,rand(4),(0.0,1.0))
253276

277+
278+
279+
280+
281+
@parameters t p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12
282+
@variables y1(t) y2(t) y3(t) y4(t) y5(t) y6(t) y7(t) y8(t)
283+
@derivatives D'~t
284+
eqs = [D(y1) ~ -p1*y1 + p2*y2 + p3*y3 + p4,
285+
D(y2) ~ p1*y1 - p5*y2,
286+
D(y3) ~ -p6*y3 + p2*y4 + p7*y5,
287+
D(y4) ~ p3*y2 + p1*y3 - p8*y4,
288+
D(y5) ~ -p9*y5 + p2*y6 + p2*y7,
289+
D(y6) ~ -p10*y6*y8 + p11*y4 + p1*y5 -
290+
p2*y6 + p11*y7,
291+
D(y7) ~ p10*y6*y8 - p12*y7,
292+
D(y8) ~ -p10*y6*y8 + p12*y7]
293+
de = ODESystem(eqs)
294+
jac = calculate_jacobian(de)
295+
#ModelingToolkit.generate_factorized_W(de)
296+
hires = ODEFunction(de, [y1,y2,y3,y4,y5,y6,y7,y8],
297+
[p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12])
298+
299+
u0 = zeros(8)
300+
u0[1] = 1
301+
u0[8] = 0.0057
302+
254303
"""
255304
[Hires Problem](http://nbviewer.jupyter.org/github/JuliaDiffEq/DiffEqBenchmarks.jl/blob/master/StiffODE/Hires.ipynb) (Stiff)
256305
@@ -276,24 +325,21 @@ f(y) = \\begin{pmatrix}
276325
277326
http://www.radford.edu/~thompson/vodef90web/problems/demosnodislin/Demos_Pitagora/DemoHires/demohires.pdf
278327
"""
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
293328
prob_ode_hires = ODEProblem(hires,u0,(0.0,321.8122), (1.71, 0.43, 8.32, 0.0007, 8.75,
294329
10.03, 0.035, 1.12, 1.745, 280.0,
295330
0.69, 1.81))
296331

332+
@parameters t p1 p2 p3
333+
@variables y1(t) y2(t) y3(t)
334+
@derivatives D'~t
335+
eqs = [D(y1) ~ p1*(y2+y1*(1-p2*y1-y2)),
336+
D(y2) ~ (y3-(1+y1)*y2)/p1,
337+
D(y3) ~ p3*(y1-y3)]
338+
de = ODESystem(eqs)
339+
jac = calculate_jacobian(de)
340+
#ModelingToolkit.generate_factorized_W(de)
341+
orego = ODEFunction(de, [y1,y2,y3], [p1,p2,p3])
342+
297343
"""
298344
[Orego Problem](http://nbviewer.jupyter.org/github/JuliaDiffEq/DiffEqBenchmarks.jl/blob/master/StiffODE/Orego.ipynb) (Stiff)
299345
@@ -316,9 +362,4 @@ where ``s=77.27``, ``w=0.161`` and ``q=8.375⋅10^{-6}``.
316362
317363
http://www.radford.edu/~thompson/vodef90web/problems/demosnodislin/Demos_Pitagora/DemoOrego/demoorego.pdf
318364
"""
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
324365
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: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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)