@@ -10,9 +10,9 @@ export prob_sde_linear_stratonovich, prob_sde_2Dlinear_stratonovich
10
10
11
11
# ## SDE Examples
12
12
13
- f = (u,p,t) -> 1.01 u
14
- σ = (u,p,t) -> 0.87 u
15
- (ff :: typeof (f))( :: Type{Val{:analytic}} , u0,p,t,W) = u0 . *exp . (0.63155 t+ 0.87 W)
13
+ f_linear (u,p,t) = 1.01 u
14
+ σ_linear (u,p,t) = 0.87 u
15
+ linear_analytic ( u0,p,t,W) = @. (u0 * exp (0.63155 t+ 0.87 W) )
16
16
17
17
@doc doc"""
18
18
```math
@@ -25,24 +25,15 @@ u(u0,p,t,W_t)=u0\\exp((α-\\frac{β^2}{2})t+βW_t)
25
25
```
26
26
27
27
"""
28
- prob_sde_linear = SDEProblem (f,σ,1 / 2 ,(0.0 ,1.0 ))
29
-
30
- f = (u,p,t) -> 1.01 u
31
- σ = (u,p,t) -> 0.87 u
32
- (ff:: typeof (f))(:: Type{Val{:analytic}} ,u0,p,t,W) = u0.* exp .(1.01 t+ 0.87 W)
33
- prob_sde_linear_stratonovich = SDEProblem (f,σ,1 / 2 ,(0.0 ,1.0 ))
34
-
35
- f = (du,u,p,t) -> begin
36
- for i = 1 : length (u)
37
- du[i] = 1.01 * u[i]
38
- end
39
- end
40
- σ = (du,u,p,t) -> begin
41
- for i in 1 : length (u)
42
- du[i] = .87 * u[i]
43
- end
44
- end
45
- (ff:: typeof (f))(:: Type{Val{:analytic}} ,u0,p,t,W) = u0.* exp .(0.63155 * t+ 0.87 * W)
28
+ prob_sde_linear = SDEProblem (SDEFunction (f_linear,σ_linear,
29
+ analytic= linear_analytic),σ_linear,1 / 2 ,(0.0 ,1.0 ))
30
+
31
+ linear_analytic_strat (u0,p,t,W) = @. (u0* exp (1.01 t+ 0.87 W))
32
+ prob_sde_linear_stratonovich = SDEProblem (SDEFunction (f_linear,σ_linear,
33
+ analytic= linear_analytic_strat),
34
+ σ_linear,1 / 2 ,(0.0 ,1.0 ))
35
+ f_linear_iip (du,u,p,t) = @. (du = 1.01 * u)
36
+ σ_linear_iip (du,u,p,t) = @. (du = 0.87 * u)
46
37
@doc doc"""
47
38
8 linear SDEs (as a 4x2 matrix):
48
39
@@ -55,24 +46,17 @@ where β=1.01, α=0.87, and initial condtion u0=1/2 with solution
55
46
u(u0,p,t,W_t)=u0\\ exp((α-\\ frac{β^2}{2})t+βW_t)
56
47
```
57
48
"""
58
- prob_sde_2Dlinear = SDEProblem (f,σ,ones (4 ,2 )/ 2 ,(0.0 ,1.0 ))
59
-
60
- f = (du,u,p,t) -> begin
61
- for i = 1 : length (u)
62
- du[i] = 1.01 * u[i]
63
- end
64
- end
65
- σ = (du,u,p,t) -> begin
66
- for i in 1 : length (u)
67
- du[i] = .87 * u[i]
68
- end
69
- end
70
- (ff:: typeof (f))(:: Type{Val{:analytic}} ,u0,p,t,W) = u0.* exp .(1.01 * t+ 0.87 * W)
71
- prob_sde_2Dlinear_stratonovich = SDEProblem (f,σ,ones (4 ,2 )/ 2 ,(0.0 ,1.0 ))
72
-
73
- f = (u,p,t) -> - .25 * u* (1 - u^ 2 )
74
- σ = (u,p,t) -> .5 * (1 - u^ 2 )
75
- (ff:: typeof (f))(:: Type{Val{:analytic}} ,u0,p,t,W) = ((1 + u0). * exp .(W)+ u0- 1 ). / ((1 + u0). * exp .(W)+ 1 - u0)
49
+ prob_sde_2Dlinear = SDEProblem (SDEFunction (f_linear_iip,σ_linear_iip,
50
+ analytic= linear_analytic),
51
+ σ_linear_iip,ones (4 ,2 )/ 2 ,(0.0 ,1.0 ))
52
+ prob_sde_2Dlinear_stratonovich = SDEProblem (SDEFunction (f_linear_iip,σ_linear_iip,
53
+ analytic= linear_analytic_strat),
54
+ σ_linear_iip,ones (4 ,2 )/ 2 ,(0.0 ,1.0 ))
55
+
56
+ f_cubic (u,p,t) = - .25 * u* (1 - u^ 2 )
57
+ σ_cubic (u,p,t) = .5 * (1 - u^ 2 )
58
+ cubic_analytic (u0,p,t,W) = @. ((1 + u0)* exp (W)+ u0- 1 )/ ((1 + u0)* exp (W)+ 1 - u0)
59
+ ff_cubic = SDEFunction (f_cubic,σ_cubic,analytic = cubic_analytic)
76
60
@doc doc"""
77
61
```math
78
62
du_t = \\ frac{1}{4}u(1-u^2)dt + \\ frac{1}{2}(1-u^2)dW_t
@@ -84,11 +68,12 @@ and initial condtion u0=1/2, with solution
84
68
u(u0,p,t,W_t)=\\ frac{(1+u0)\\ exp(W_t)+u0-1}{(1+u0)\\ exp(W_t)+1-u0}
85
69
```
86
70
"""
87
- prob_sde_cubic = SDEProblem (f,σ ,1 / 2 ,(0.0 ,1.0 ))
71
+ prob_sde_cubic = SDEProblem (ff_cubic,σ_cubic ,1 / 2 ,(0.0 ,1.0 ))
88
72
89
- f = (u,p,t) -> - 0.01 * sin .(u).* cos .(u).^ 3
90
- σ = (u,p,t) -> 0.1 * cos .(u).^ 2
91
- (ff:: typeof (f))(:: Type{Val{:analytic}} ,u0,p,t,W) = atan .(0.1 * W + tan .(u0))
73
+ f_wave (u,p,t) = @. - 0.01 * sin (u)* cos (u)^ 3
74
+ σ_wave (u,p,t) = @. 0.1 * cos (u)^ 2
75
+ wave_analytic (u0,p,t,W) = @. atan (0.1 * W + tan (u0))
76
+ ff_wave = SDEFunction (f_wave,σ_wave,analytic= wave_analytic)
92
77
@doc doc"""
93
78
```math
94
79
du_t = -\\ frac{1}{100}\s in(u)\c os^3(u)dt + \\ frac{1}{10}\c os^{2}(u_t) dW_t
@@ -100,13 +85,13 @@ and initial condition `u0=1.0` with solution
100
85
u(u0,p,t,W_t)=\\ arctan(\\ frac{W_t}{10} + \\ tan(u0))
101
86
```
102
87
"""
103
- prob_sde_wave = SDEProblem (f,σ ,1. ,(0.0 ,1.0 ))
88
+ prob_sde_wave = SDEProblem (ff_wave,σ_wave ,1.0 ,(0.0 ,1.0 ))
104
89
105
- f = (u,p,t) -> p[2 ]. / sqrt . (1 + t) - u. / (2 * (1 + t))
106
- σ = (u,p,t) -> p[1 ]* p[2 ]. / sqrt . (1 + t)
90
+ f_additive (u,p,t) = @. p[2 ]/ sqrt (1 + t) - u/ (2 * (1 + t))
91
+ σ_additive (u,p,t) = @. p[1 ]* p[2 ]/ sqrt (1 + t)
107
92
p = (0.1 ,0.05 )
108
- (ff :: typeof (f))( :: Type{Val{:analytic}} , u0,p,t,W) = u0 . /sqrt . (1 + t) + p[2 ]* (t+ p[1 ]* W). / sqrt . (1 + t)
109
-
93
+ additive_analytic ( u0,p,t,W) = @. u0 / sqrt (1 + t) + p[2 ]* (t+ p[1 ]* W)/ sqrt (1 + t)
94
+ ff_additive = SDEFunction (f_additive,σ_additive,analytic = additive_analytic)
110
95
@doc doc"""
111
96
Additive noise problem
112
97
@@ -120,40 +105,24 @@ and initial condition u0=1.0 with α=0.1 and β=0.05, with solution
120
105
u(u0,p,t,W_t)=\\ frac{u0}{\\ sqrt{1+t}} + \\ frac{β(t+αW_t)}{\\ sqrt{1+t}}
121
106
```
122
107
"""
123
- prob_sde_additive = SDEProblem (f,σ,1. ,(0.0 ,1.0 ),p)
124
-
125
- const sde_wave_αvec = [0.1 ;0.1 ;0.1 ;0.1 ]
126
- const sde_wave_βvec = [0.5 ;0.25 ;0.125 ;0.1115 ]
127
- f = (du,u,p,t) -> begin
128
- for i in 1 : length (u)
129
- du[i] = sde_wave_βvec[i]/ sqrt (1 + t) - u[i]/ (2 * (1 + t))
130
- end
131
- end
132
-
133
- σ = (du,u,p,t) -> begin
134
- for i in 1 : length (u)
135
- du[i] = sde_wave_αvec[i]* sde_wave_βvec[i]/ sqrt (1 + t)
136
- end
137
- end
138
- (ff:: typeof (f))(:: Type{Val{:analytic}} ,u0,p,t,W) = u0./ sqrt (1 + t) + sde_wave_βvec.* (t+ sde_wave_αvec.* W). / sqrt (1 + t)
108
+ prob_sde_additive = SDEProblem (ff_additive,σ_additive,1.0 ,(0.0 ,1.0 ),p)
139
109
110
+ f_additive_iip (du,u,p,t) = @. (du = p[2 ]/ sqrt (1 + t) - u/ (2 * (1 + t)))
111
+ σ_additive_iip (du,u,p,t) = @. (du = p[1 ]* p[2 ]/ sqrt (1 + t))
112
+ ff_additive_iip = SDEFunction (f_additive_iip,σ_additive_iip,analytic= additive_analytic)
113
+ p = ([0.1 ;0.1 ;0.1 ;0.1 ],[0.5 ;0.25 ;0.125 ;0.1115 ])
140
114
@doc doc"""
141
115
A multiple dimension extension of `additiveSDEExample`
142
116
143
117
"""
144
- prob_sde_additivesystem = SDEProblem (f,σ ,[1. ;1. ;1. ;1. ],(0.0 ,1.0 ))
118
+ prob_sde_additivesystem = SDEProblem (ff_additive_iip,σ_additive_iip ,[1. ;1. ;1. ;1. ],(0.0 ,1.0 ),p )
145
119
146
- f = @ode_def_nohes LorenzSDE begin
120
+ f_lorenz = @ode_def_bare LorenzSDE begin
147
121
dx = σ* (y- x)
148
122
dy = x* (ρ- z) - y
149
123
dz = x* y - β* z
150
124
end σ ρ β
151
-
152
- σ = (du,u,p,t) -> begin
153
- for i in 1 : 3
154
- du[i] = 3.0 # Additive
155
- end
156
- end
125
+ σ_lorenz (du,u,p,t) = @. (du = 3.0 )
157
126
@doc doc"""
158
127
Lorenz Attractor with additive noise
159
128
@@ -167,17 +136,18 @@ dz &= (x*y - β*z)dt + αdW_t \\\\
167
136
168
137
with ``σ=10``, ``ρ=28``, ``β=8/3``, ``α=3.0`` and inital condition ``u0=[1;1;1]``.
169
138
"""
170
- prob_sde_lorenz = SDEProblem (f,σ ,ones (3 ),(0.0 ,10.0 ),(10.0 ,28.0 ,2.66 ))
139
+ prob_sde_lorenz = SDEProblem (f_lorenz,σ_lorenz ,ones (3 ),(0.0 ,10.0 ),(10.0 ,28.0 ,2.66 ))
171
140
172
141
173
- f = (u,p,t) -> (1 / 3 )* u^ (1 / 3 ) + 6 * u^ (2 / 3 )
174
- σ = (u,p,t) -> u^ (2 / 3 )
175
- (ff:: typeof (f))(:: Type{Val{:analytic}} ,u0,p,t,W) = (2 t + 1 + W/ 3 )^ 3
142
+ f_nltest (u,p,t) = (1 / 3 )* u^ (1 / 3 ) + 6 * u^ (2 / 3 )
143
+ σ_nltest (u,p,t) = u^ (2 / 3 )
144
+ analytic_nltest (u0,p,t,W) = (2 t + 1 + W/ 3 )^ 3
145
+ ff_nltest = SDEFunction (f_nltest,σ_nltest,analytic= analytic_nltest)
176
146
@doc doc"""
177
147
Runge–Kutta methods for numerical solution of stochastic differential equations
178
148
Tocino and Ardanuy
179
149
"""
180
- prob_sde_nltest = SDEProblem (f,σ ,1.0 ,(0.0 ,10.0 ))
150
+ prob_sde_nltest = SDEProblem (ff_nltest,σ_nltest ,1.0 ,(0.0 ,10.0 ))
181
151
182
152
function oval2ModelExample (;largeFluctuations= false ,useBigs= false ,noiseLevel= 1 )
183
153
# Parameters
@@ -331,21 +301,28 @@ stiff_quad_f_ito(u,p,t) = -(p[1]+(p[2]^2)*u)*(1-u^2)
331
301
stiff_quad_f_strat (u,p,t) = - p[1 ]* (1 - u^ 2 )
332
302
stiff_quad_g (u,p,t) = p[2 ]* (1 - u^ 2 )
333
303
334
- function stiff_quad_f_ito ( :: Type{Val{:analytic}} , u0,p,t,W)
304
+ function stiff_quad_f_ito_analytic ( u0,p,t,W)
335
305
α = p[1 ]
336
306
β = p[2 ]
337
307
exp_tmp = exp (- 2 * α* t+ 2 * β* W)
338
308
tmp = 1 + u0
339
309
(tmp* exp_tmp + u0 - 1 )/ (tmp* exp_tmp - u0 + 1 )
340
310
end
341
- function stiff_quad_f_strat (:: Type{Val{:analytic}} ,u0,p,t,W)
311
+
312
+ ff_stiff_quad_ito = SDEFunction (stiff_quad_f_ito,stiff_quad_g,
313
+ analytic= stiff_quad_f_ito_analytic)
314
+
315
+ function stiff_quad_f_strat_analytic (u0,p,t,W)
342
316
α = p[1 ]
343
317
β = p[2 ]
344
318
exp_tmp = exp (- 2 * α* t+ 2 * β* W)
345
319
tmp = 1 + u0
346
320
(tmp* exp_tmp + u0 - 1 )/ (tmp* exp_tmp - u0 + 1 )
347
321
end
348
322
323
+ ff_stiff_quad_strat = SDEFunction (stiff_quad_f_strat,stiff_quad_g,
324
+ analytic= stiff_quad_f_strat_analytic)
325
+
349
326
@doc doc"""
350
327
The composite Euler method for stiff stochastic
351
328
differential equations
@@ -363,7 +340,7 @@ Stiffness of Euler is determined by α+β²<1
363
340
Higher α or β is stiff, with α being deterministic stiffness and
364
341
β being noise stiffness (and grows by square).
365
342
"""
366
- prob_sde_stiffquadito = SDEProblem (stiff_quad_f_ito ,stiff_quad_g,0.5 ,(0.0 ,3.0 ),(1.0 ,1.0 ))
343
+ prob_sde_stiffquadito = SDEProblem (ff_stiff_quad_ito ,stiff_quad_g,0.5 ,(0.0 ,3.0 ),(1.0 ,1.0 ))
367
344
368
345
@doc doc"""
369
346
The composite Euler method for stiff stochastic
@@ -382,7 +359,7 @@ Stiffness of Euler is determined by α+β²<1
382
359
Higher α or β is stiff, with α being deterministic stiffness and
383
360
β being noise stiffness (and grows by square).
384
361
"""
385
- prob_sde_stiffquadstrat = SDEProblem (stiff_quad_f_strat ,stiff_quad_g,0.5 ,(0.0 ,3.0 ),(1.0 ,1.0 ))
362
+ prob_sde_stiffquadstrat = SDEProblem (ff_stiff_quad_strat ,stiff_quad_g,0.5 ,(0.0 ,3.0 ),(1.0 ,1.0 ))
386
363
387
364
@doc doc"""
388
365
Stochastic Heat Equation with scalar multiplicative noise
0 commit comments