1
1
# # Lotka-Volterra
2
2
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
7
9
8
10
"""
9
11
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])
19
21
20
22
# # Fitzhugh-Nagumo
21
23
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
26
34
"""
27
35
Fitzhugh-Nagumo (Non-stiff)
28
36
@@ -35,11 +43,15 @@ with initial condition ``v=w=1``
35
43
"""
36
44
prob_ode_fitzhughnagumo = ODEProblem (fitz,[1.0 ;1.0 ],(0.0 ,1.0 ),(0.7 ,0.8 ,1 / 12.5 ,0.5 ))
37
45
46
+
38
47
# 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 )
43
55
44
56
"""
45
57
Van der Pol Equations
@@ -73,12 +85,14 @@ Stiff parameters.
73
85
prob_ode_vanstiff = ODEProblem (van,[0 ;sqrt (3 )],(0.0 ,1.0 ),1e6 )
74
86
75
87
# 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 )
82
96
83
97
"""
84
98
The Robertson biochemical reactions: (Stiff)
@@ -137,11 +151,14 @@ prob_ode_threebody = ODEProblem(threebody,[0.994, 0.0, 0.0, big(-2.0015851063790
137
151
138
152
# Rigid Body Equations
139
153
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 )
145
162
146
163
"""
147
164
Rigid Body Equations (Non-stiff)
@@ -251,6 +268,31 @@ const MM_linear =Matrix(Diagonal(0.5ones(4)))
251
268
mm_f = ODEFunction (mm_linear;analytic = (u0,p,t) -> exp (inv (MM_linear)* mm_A* t)* u0, mass_matrix= MM_linear)
252
269
prob_ode_mm_linear = ODEProblem (mm_f,rand (4 ),(0.0 ,1.0 ))
253
270
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
+
254
296
"""
255
297
[Hires Problem](http://nbviewer.jupyter.org/github/JuliaDiffEq/DiffEqBenchmarks.jl/blob/master/StiffODE/Hires.ipynb) (Stiff)
256
298
@@ -276,24 +318,21 @@ f(y) = \\begin{pmatrix}
276
318
277
319
http://www.radford.edu/~thompson/vodef90web/problems/demosnodislin/Demos_Pitagora/DemoHires/demohires.pdf
278
320
"""
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
293
321
prob_ode_hires = ODEProblem (hires,u0,(0.0 ,321.8122 ), (1.71 , 0.43 , 8.32 , 0.0007 , 8.75 ,
294
322
10.03 , 0.035 , 1.12 , 1.745 , 280.0 ,
295
323
0.69 , 1.81 ))
296
324
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
+
297
336
"""
298
337
[Orego Problem](http://nbviewer.jupyter.org/github/JuliaDiffEq/DiffEqBenchmarks.jl/blob/master/StiffODE/Orego.ipynb) (Stiff)
299
338
@@ -316,9 +355,4 @@ where ``s=77.27``, ``w=0.161`` and ``q=8.375⋅10^{-6}``.
316
355
317
356
http://www.radford.edu/~thompson/vodef90web/problems/demosnodislin/Demos_Pitagora/DemoOrego/demoorego.pdf
318
357
"""
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
324
358
prob_ode_orego = ODEProblem (orego,[1.0 ,2.0 ,3.0 ],(0.0 ,30.0 ),[77.27 ,8.375e-6 ,0.161 ])
0 commit comments