@@ -48,13 +48,15 @@ with initial condition ``v=w=1``
4848prob_ode_fitzhughnagumo = ODEProblem (fitz, [1.0 ; 1.0 ], (0.0 , 1.0 ),
4949 (0.7 , 0.8 , 1 / 12.5 , 0.5 ))
5050
51- # Van der Pol Equations
52- @parameters μ
53- @variables x (t) y (t)
51+ # # Van der Pol Equations
5452
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
5860
5961"""
6062Van der Pol Equations
@@ -66,12 +68,11 @@ Van der Pol Equations
6668\\ frac{dy}{dt} = μ((1-x^2)y -x)
6769```
6870
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``)
7072
7173Non-stiff parameters.
7274"""
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 ])
7576
7677"""
7778Van der Pol Equations
@@ -83,21 +84,25 @@ Van der Pol Equations
8384\\ frac{dy}{dt} = μ((1-x^2)y -x)
8485```
8586
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``)
8788
8889Stiff parameters.
8990"""
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
101106
102107"""
103108The Robertson biochemical reactions: (Stiff)
@@ -118,9 +123,7 @@ Hairer Norsett Wanner Solving Ordinary Differential Equations I - Nonstiff Probl
118123
119124Usually solved on ``[0,1e11]``
120125"""
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 ])
124127
125128# Three Body
126129const threebody_μ = big (0.012277471 );
@@ -174,15 +177,19 @@ prob_ode_threebody = ODEProblem(threebody,
174177 [0.994 , 0.0 , 0.0 , big (- 2.00158510637908252240537862224 )],
175178 (big (0.0 ), big (17.0652165601579625588917206249 )))
176179
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
186193
187194"""
188195Rigid Body Equations (Non-stiff)
@@ -207,10 +214,7 @@ or Hairer Norsett Wanner Solving Ordinary Differential Equations I - Nonstiff Pr
207214
208215Usually solved from 0 to 20.
209216"""
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 ])
214218
215219# Pleiades Problem
216220
@@ -356,28 +360,27 @@ mm_f = ODEFunction(mm_linear; analytic = (u0, p, t) -> exp(inv(MM_linear) * mm_A
356360 mass_matrix = MM_linear)
357361prob_ode_mm_linear = ODEProblem (mm_f, rand (4 ), (0.0 , 1.0 ))
358362
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
372378
373379u0 = zeros (8 )
374380u0[1 ] = 1
375381u0[8 ] = 0.0057
376382
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 )
381384
382385"""
383386Hires Problem (Stiff)
@@ -401,16 +404,18 @@ where ``f`` is defined by
401404Reference: [demohires.pdf](http://www.radford.edu/~thompson/vodef90web/problems/demosnodislin/Demos_Pitagora/DemoHires/demohires.pdf)
402405Notebook: [Hires.ipynb](http://nbviewer.jupyter.org/github/JuliaDiffEq/DiffEqBenchmarks.jl/blob/master/StiffODE/Hires.ipynb)
403406"""
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)
406408
407- @parameters p1 p2 p3
408- @variables y1 (t) y2 (t) y3 (t)
409+ # # Orego Problem
409410
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
414419
415420"""
416421Orego Problem (Stiff)
@@ -430,6 +435,4 @@ where ``s=77.27``, ``w=0.161`` and ``q=8.375⋅10^{-6}``.
430435Reference: [demoorego.pdf](http://www.radford.edu/~thompson/vodef90web/problems/demosnodislin/Demos_Pitagora/DemoOrego/demoorego.pdf)
431436Notebook: [Orego.ipynb](http://nbviewer.jupyter.org/github/JuliaDiffEq/DiffEqBenchmarks.jl/blob/master/StiffODE/Orego.ipynb)
432437"""
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