@@ -48,13 +48,15 @@ with initial condition ``v=w=1``
48
48
prob_ode_fitzhughnagumo = ODEProblem (fitz, [1.0 ; 1.0 ], (0.0 , 1.0 ),
49
49
(0.7 , 0.8 , 1 / 12.5 , 0.5 ))
50
50
51
- # Van der Pol Equations
52
- @parameters μ
53
- @variables x (t) y (t)
51
+ # # Van der Pol Equations
54
52
55
- eqs = [D (y) ~ μ * ((1 - x^ 2 ) * y - x),
56
- D (x) ~ y]
57
- van = System (eqs, t; name = :van_der_pol ) |> mtkcompile
53
+ function vanderpol (du, u, p, t)
54
+ x = u[1 ]
55
+ y = u[2 ]
56
+ μ = p[1 ]
57
+ du[1 ] = y
58
+ du[2 ] = μ * ((1 - x^ 2 ) * y - x)
59
+ end
58
60
59
61
"""
60
62
Van der Pol Equations
@@ -66,12 +68,11 @@ Van der Pol Equations
66
68
\\ frac{dy}{dt} = μ((1-x^2)y -x)
67
69
```
68
70
69
- with ``μ=1.0`` and ``u_0=[x => \\ sqrt{3}, y => 0]``
71
+ with ``μ=1.0`` and ``u_0=[\\ sqrt{3}, 0]`` (where ``u[1] = x``, ``u[2] = y``)
70
72
71
73
Non-stiff parameters.
72
74
"""
73
- prob_ode_vanderpol = ODEProblem (van, [y => 0 , x => sqrt (3 ), μ => 1.0 ], (0.0 , 1.0 ),
74
- jac = true , eval_module = @__MODULE__ )
75
+ prob_ode_vanderpol = ODEProblem (vanderpol, [sqrt (3 ), 0.0 ], (0.0 , 1.0 ), [1.0 ])
75
76
76
77
"""
77
78
Van der Pol Equations
@@ -83,21 +84,25 @@ Van der Pol Equations
83
84
\\ frac{dy}{dt} = μ((1-x^2)y -x)
84
85
```
85
86
86
- with ``μ=10^6`` and ``u_0=[x => \\ sqrt{3}, y => 0]``
87
+ with ``μ=10^6`` and ``u_0=[\\ sqrt{3}, 0]`` (where ``u[1] = x``, ``u[2] = y``)
87
88
88
89
Stiff parameters.
89
90
"""
90
- prob_ode_vanderpol_stiff = ODEProblem (van, [y => 0 , x => sqrt (3 ), μ => 1e6 ], (0.0 , 1.0 ),
91
- jac = true , eval_module = @__MODULE__ )
92
-
93
- # ROBER
94
- @parameters k₁ k₂ k₃
95
- @variables y₁ (t) y₂ (t) y₃ (t)
96
-
97
- eqs = [D (y₁) ~ - k₁ * y₁ + k₃ * y₂ * y₃,
98
- D (y₂) ~ k₁ * y₁ - k₂ * y₂^ 2 - k₃ * y₂ * y₃,
99
- D (y₃) ~ k₂ * y₂^ 2 ]
100
- rober = System (eqs, t; name = :rober ) |> mtkcompile
91
+ prob_ode_vanderpol_stiff = ODEProblem (vanderpol, [sqrt (3 ), 0.0 ], (0.0 , 1.0 ), [1e6 ])
92
+
93
+ # # ROBER
94
+
95
+ function rober (du, u, p, t)
96
+ y₁ = u[1 ]
97
+ y₂ = u[2 ]
98
+ y₃ = u[3 ]
99
+ k₁ = p[1 ]
100
+ k₂ = p[2 ]
101
+ k₃ = p[3 ]
102
+ du[1 ] = - k₁ * y₁ + k₃ * y₂ * y₃
103
+ du[2 ] = k₁ * y₁ - k₂ * y₂^ 2 - k₃ * y₂ * y₃
104
+ du[3 ] = k₂ * y₂^ 2
105
+ end
101
106
102
107
"""
103
108
The Robertson biochemical reactions: (Stiff)
@@ -118,9 +123,7 @@ Hairer Norsett Wanner Solving Ordinary Differential Equations I - Nonstiff Probl
118
123
119
124
Usually solved on ``[0,1e11]``
120
125
"""
121
- prob_ode_rober = ODEProblem (
122
- rober, [[y₁, y₂, y₃] .=> [1.0 ; 0.0 ; 0.0 ]; [k₁, k₂, k₃] .=> (0.04 , 3e7 , 1e4 )],
123
- (0.0 , 1e11 ), jac = true , eval_module = @__MODULE__ )
126
+ prob_ode_rober = ODEProblem (rober, [1.0 , 0.0 , 0.0 ], (0.0 , 1e11 ), [0.04 , 3e7 , 1e4 ])
124
127
125
128
# Three Body
126
129
const threebody_μ = big (0.012277471 );
@@ -174,15 +177,19 @@ prob_ode_threebody = ODEProblem(threebody,
174
177
[0.994 , 0.0 , 0.0 , big (- 2.00158510637908252240537862224 )],
175
178
(big (0.0 ), big (17.0652165601579625588917206249 )))
176
179
177
- # Rigid Body Equations
178
-
179
- @parameters I₁ I₂ I₃
180
- @variables y₁ (t) y₂ (t) y₃ (t)
181
-
182
- eqs = [D (y₁) ~ I₁ * y₂ * y₃,
183
- D (y₂) ~ I₂ * y₁ * y₃,
184
- D (y₃) ~ I₃ * y₁ * y₂]
185
- rigid = System (eqs, t; name = :rigid_body ) |> mtkcompile
180
+ # # Rigid Body Equations
181
+
182
+ function rigidbody (du, u, p, t)
183
+ y₁ = u[1 ]
184
+ y₂ = u[2 ]
185
+ y₃ = u[3 ]
186
+ I₁ = p[1 ]
187
+ I₂ = p[2 ]
188
+ I₃ = p[3 ]
189
+ du[1 ] = I₁ * y₂ * y₃
190
+ du[2 ] = I₂ * y₁ * y₃
191
+ du[3 ] = I₃ * y₁ * y₂
192
+ end
186
193
187
194
"""
188
195
Rigid Body Equations (Non-stiff)
@@ -207,10 +214,7 @@ or Hairer Norsett Wanner Solving Ordinary Differential Equations I - Nonstiff Pr
207
214
208
215
Usually solved from 0 to 20.
209
216
"""
210
- prob_ode_rigidbody = ODEProblem (
211
- rigid, [[y₁, y₂, y₃] .=> [1.0 , 0.0 , 0.9 ]; [I₁, I₂, I₃] .=> (- 2.0 , 1.25 , - 0.5 )],
212
- (0.0 , 20.0 ),
213
- jac = true , eval_module = @__MODULE__ )
217
+ prob_ode_rigidbody = ODEProblem (rigidbody, [1.0 , 0.0 , 0.9 ], (0.0 , 20.0 ), [- 2.0 , 1.25 , - 0.5 ])
214
218
215
219
# Pleiades Problem
216
220
@@ -356,28 +360,27 @@ mm_f = ODEFunction(mm_linear; analytic = (u0, p, t) -> exp(inv(MM_linear) * mm_A
356
360
mass_matrix = MM_linear)
357
361
prob_ode_mm_linear = ODEProblem (mm_f, rand (4 ), (0.0 , 1.0 ))
358
362
359
- @parameters p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12
360
- @variables y1 (t) y2 (t) y3 (t) y4 (t) y5 (t) y6 (t) y7 (t) y8 (t)
361
-
362
- eqs = [D (y1) ~ - p1 * y1 + p2 * y2 + p3 * y3 + p4,
363
- D (y2) ~ p1 * y1 - p5 * y2,
364
- D (y3) ~ - p6 * y3 + p2 * y4 + p7 * y5,
365
- D (y4) ~ p3 * y2 + p1 * y3 - p8 * y4,
366
- D (y5) ~ - p9 * y5 + p2 * y6 + p2 * y7,
367
- D (y6) ~ - p10 * y6 * y8 + p11 * y4 + p1 * y5 -
368
- p2 * y6 + p11 * y7,
369
- D (y7) ~ p10 * y6 * y8 - p12 * y7,
370
- D (y8) ~ - p10 * y6 * y8 + p12 * y7]
371
- hires = System (eqs, t; name = :hires ) |> mtkcompile
363
+ # # Hires Problem
364
+
365
+ function hires (du, u, p, t)
366
+ y1, y2, y3, y4, y5, y6, y7, y8 = u
367
+ p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12 = p
368
+
369
+ du[1 ] = - p1 * y1 + p2 * y2 + p3 * y3 + p4
370
+ du[2 ] = p1 * y1 - p5 * y2
371
+ du[3 ] = - p6 * y3 + p2 * y4 + p7 * y5
372
+ du[4 ] = p3 * y2 + p1 * y3 - p8 * y4
373
+ du[5 ] = - p9 * y5 + p2 * y6 + p2 * y7
374
+ du[6 ] = - p10 * y6 * y8 + p11 * y4 + p1 * y5 - p2 * y6 + p11 * y7
375
+ du[7 ] = p10 * y6 * y8 - p12 * y7
376
+ du[8 ] = - p10 * y6 * y8 + p12 * y7
377
+ end
372
378
373
379
u0 = zeros (8 )
374
380
u0[1 ] = 1
375
381
u0[8 ] = 0.0057
376
382
377
- u0 = [y1, y2, y3, y4, y5, y6, y7, y8] .=> u0
378
- p = [p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11,
379
- p12] .=> (1.71 , 0.43 , 8.32 , 0.0007 , 8.75 ,
380
- 10.03 , 0.035 , 1.12 , 1.745 , 280.0 , 0.69 , 1.81 )
383
+ p = (1.71 , 0.43 , 8.32 , 0.0007 , 8.75 , 10.03 , 0.035 , 1.12 , 1.745 , 280.0 , 0.69 , 1.81 )
381
384
382
385
"""
383
386
Hires Problem (Stiff)
@@ -401,16 +404,18 @@ where ``f`` is defined by
401
404
Reference: [demohires.pdf](http://www.radford.edu/~thompson/vodef90web/problems/demosnodislin/Demos_Pitagora/DemoHires/demohires.pdf)
402
405
Notebook: [Hires.ipynb](http://nbviewer.jupyter.org/github/JuliaDiffEq/DiffEqBenchmarks.jl/blob/master/StiffODE/Hires.ipynb)
403
406
"""
404
- prob_ode_hires = ODEProblem (
405
- hires, [u0; p], (0.0 , 321.8122 ), jac = true , eval_module = @__MODULE__ )
407
+ prob_ode_hires = ODEProblem (hires, u0, (0.0 , 321.8122 ), p)
406
408
407
- @parameters p1 p2 p3
408
- @variables y1 (t) y2 (t) y3 (t)
409
+ # # Orego Problem
409
410
410
- eqs = [D (y1) ~ p1 * (y2 + y1 * (1 - p2 * y1 - y2)),
411
- D (y2) ~ (y3 - (1 + y1) * y2) / p1,
412
- D (y3) ~ p3 * (y1 - y3)]
413
- orego = System (eqs, t; name = :orego ) |> mtkcompile
411
+ function orego (du, u, p, t)
412
+ y1, y2, y3 = u
413
+ p1, p2, p3 = p
414
+
415
+ du[1 ] = p1 * (y2 + y1 * (1 - p2 * y1 - y2))
416
+ du[2 ] = (y3 - (1 + y1) * y2) / p1
417
+ du[3 ] = p3 * (y1 - y3)
418
+ end
414
419
415
420
"""
416
421
Orego Problem (Stiff)
@@ -430,6 +435,4 @@ where ``s=77.27``, ``w=0.161`` and ``q=8.375⋅10^{-6}``.
430
435
Reference: [demoorego.pdf](http://www.radford.edu/~thompson/vodef90web/problems/demosnodislin/Demos_Pitagora/DemoOrego/demoorego.pdf)
431
436
Notebook: [Orego.ipynb](http://nbviewer.jupyter.org/github/JuliaDiffEq/DiffEqBenchmarks.jl/blob/master/StiffODE/Orego.ipynb)
432
437
"""
433
- prob_ode_orego = ODEProblem (
434
- orego, [[y1, y2, y3] .=> [1.0 , 2.0 , 3.0 ]; [p1, p2, p3] .=> [77.27 , 8.375e-6 , 0.161 ]],
435
- (0.0 , 30.0 ), jac = true , eval_module = @__MODULE__ )
438
+ 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