11# Linear ODE
2- linear = (u,p,t) -> (1.01 * u)
3- (f :: typeof (linear))( :: Type{Val{:analytic}} , u0,p,t) = u0* exp (1.01 * t)
2+ linear = (u,p,t) -> (p * u)
3+ linear_analytic = ( u0,p,t) -> u0* exp (p * t)
44"""
55Linear ODE
66
@@ -14,13 +14,12 @@ with initial condition ``u0=1/2``, ``α=1.01``, and solution
1414u(t) = u0e^{αt}
1515```
1616
17- with Float64s
17+ with Float64s. The parameter is ``α``
1818"""
19- prob_ode_linear = ODEProblem (linear,1 / 2 ,(0.0 ,1.0 ))
19+ prob_ode_linear = ODEProblem (
20+ ODEFunction (linear,analytic= linear_analytic),
21+ 1 / 2 ,(0.0 ,1.0 ),1.01 )
2022
21- const linear_bigα = parse (BigFloat," 1.01" )
22- f_linearbig = (u,p,t) -> (linear_bigα* u)
23- (f:: typeof (f_linearbig))(:: Type{Val{:analytic}} ,u0,p,t) = u0* exp (linear_bigα* t)
2423"""
2524Linear ODE
2625
@@ -36,14 +35,12 @@ u(t) = u0e^{αt}
3635
3736with BigFloats
3837"""
39- prob_ode_bigfloatlinear = ODEProblem (f_linearbig,parse (BigFloat," 0.5" ),(0.0 ,1.0 ))
40-
41- f_2dlinear = (du,u,p,t) -> begin
42- for i in 1 : length (u)
43- du[i] = 1.01 * u[i]
44- end
45- end
46- (f:: typeof (f_2dlinear))(:: Type{Val{:analytic}} ,u0,p,t) = u0* exp .(linear_bigα* t)
38+ prob_ode_bigfloatlinear = ODEProblem (
39+ ODEFunction (linear,analytic= linear_analytic),
40+ big (0.5 ),(0.0 ,1.0 ),big (1.01 ))
41+
42+ f_2dlinear = (du,u,p,t) -> (@. du = p* u)
43+ f_2dlinear_analytic = (u0,p,t) -> @. u0* exp (p* t)
4744"""
48454x2 version of the Linear ODE
4946
@@ -59,7 +56,9 @@ u(t) = u0e^{αt}
5956
6057with Float64s
6158"""
62- prob_ode_2Dlinear = ODEProblem (f_2dlinear,rand (4 ,2 ),(0.0 ,1.0 ))
59+ prob_ode_2Dlinear = ODEProblem (
60+ ODEFunction (f_2dlinear,analytic= f_2dlinear_analytic),
61+ rand (4 ,2 ),(0.0 ,1.0 ),1.01 )
6362
6463"""
6564100x100 version of the Linear ODE
@@ -76,14 +75,10 @@ u(t) = u0e^{αt}
7675
7776with Float64s
7877"""
79- prob_ode_large2Dlinear = ODEProblem (f_2dlinear,rand (100 ,100 ),(0.0 ,1.0 ))
80-
81- f_2dlinearbig = (du,u,p,t) -> begin
82- for i in 1 : length (u)
83- du[i] = linear_bigα* u[i]
84- end
85- end
86- (f:: typeof (f_2dlinearbig))(:: Type{Val{:analytic}} ,u0,p,t) = u0* exp .(linear_bigα* t)
78+ prob_ode_large2Dlinear = ODEProblem (
79+ ODEFunction (f_2dlinear,analytic= f_2dlinear_analytic),
80+ rand (100 ,100 ),(0.0 ,1.0 ),1.01 )
81+
8782"""
88834x2 version of the Linear ODE
8984
@@ -99,9 +94,11 @@ u(t) = u0e^{αt}
9994
10095with BigFloats
10196"""
102- prob_ode_bigfloat2Dlinear = ODEProblem (f_2dlinearbig,map (BigFloat,rand (4 ,2 )).* ones (4 ,2 )/ 2 ,(0.0 ,1.0 ))
103- f_2dlinear_notinplace = (u,p,t) -> 1.01 * u
104- (f:: typeof (f_2dlinear_notinplace))(:: Type{Val{:analytic}} ,u0,p,t) = u0* exp .(1.01 * t)
97+ prob_ode_bigfloat2Dlinear = ODEProblem (
98+ ODEFunction (f_2dlinear,analytic= f_2dlinear_analytic),
99+ BigFloat .(rand (4 ,2 )).* ones (4 ,2 )/ 2 ,(0.0 ,1.0 ),big (1.01 ))
100+
101+ f_2dlinear_notinplace = (u,p,t) -> p* u
105102"""
1061034x2 version of the Linear ODE
107104
@@ -117,4 +114,6 @@ u(t) = u0e^{αt}
117114
118115on Float64. Purposefully not in-place as a test.
119116"""
120- prob_ode_2Dlinear_notinplace = ODEProblem (f_2dlinear_notinplace,rand (4 ,2 ),(0.0 ,1.0 ))
117+ prob_ode_2Dlinear_notinplace = ODEProblem (
118+ ODEFunction (f_2dlinear_notinplace,analytic= f_2dlinear_analytic),
119+ rand (4 ,2 ),(0.0 ,1.0 ),1.01 )
0 commit comments