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,17 @@ 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
+ jac = calculate_jacobian (de)
55
+ # ModelingToolkit.generate_factorized_W(de)
56
+ van = ODEFunction (de, [x,y], [μ])
43
57
44
58
"""
45
59
Van der Pol Equations
@@ -73,12 +87,16 @@ Stiff parameters.
73
87
prob_ode_vanstiff = ODEProblem (van,[0 ;sqrt (3 )],(0.0 ,1.0 ),1e6 )
74
88
75
89
# 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₃])
82
100
83
101
"""
84
102
The Robertson biochemical reactions: (Stiff)
@@ -137,11 +155,16 @@ prob_ode_threebody = ODEProblem(threebody,[0.994, 0.0, 0.0, big(-2.0015851063790
137
155
138
156
# Rigid Body Equations
139
157
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₃])
145
168
146
169
"""
147
170
Rigid Body Equations (Non-stiff)
@@ -251,6 +274,32 @@ const MM_linear =Matrix(Diagonal(0.5ones(4)))
251
274
mm_f = ODEFunction (mm_linear;analytic = (u0,p,t) -> exp (inv (MM_linear)* mm_A* t)* u0, mass_matrix= MM_linear)
252
275
prob_ode_mm_linear = ODEProblem (mm_f,rand (4 ),(0.0 ,1.0 ))
253
276
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
+
254
303
"""
255
304
[Hires Problem](http://nbviewer.jupyter.org/github/JuliaDiffEq/DiffEqBenchmarks.jl/blob/master/StiffODE/Hires.ipynb) (Stiff)
256
305
@@ -276,24 +325,21 @@ f(y) = \\begin{pmatrix}
276
325
277
326
http://www.radford.edu/~thompson/vodef90web/problems/demosnodislin/Demos_Pitagora/DemoHires/demohires.pdf
278
327
"""
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
328
prob_ode_hires = ODEProblem (hires,u0,(0.0 ,321.8122 ), (1.71 , 0.43 , 8.32 , 0.0007 , 8.75 ,
294
329
10.03 , 0.035 , 1.12 , 1.745 , 280.0 ,
295
330
0.69 , 1.81 ))
296
331
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
+
297
343
"""
298
344
[Orego Problem](http://nbviewer.jupyter.org/github/JuliaDiffEq/DiffEqBenchmarks.jl/blob/master/StiffODE/Orego.ipynb) (Stiff)
299
345
@@ -316,9 +362,4 @@ where ``s=77.27``, ``w=0.161`` and ``q=8.375⋅10^{-6}``.
316
362
317
363
http://www.radford.edu/~thompson/vodef90web/problems/demosnodislin/Demos_Pitagora/DemoOrego/demoorego.pdf
318
364
"""
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
365
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