Skip to content

Commit b3a326f

Browse files
Merge pull request #73 from SciML/sdde
stochastic delay differential equation analyticless convergence testing
2 parents 8489358 + 198af02 commit b3a326f

File tree

5 files changed

+41
-8
lines changed

5 files changed

+41
-8
lines changed

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ os:
44
- linux
55
# - osx
66
julia:
7-
- 1.3
7+
- 1
88
# - nightly
99
#matrix:
1010
# allow_failures:

Project.toml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ RootedTrees = "47965b36-3f3e-11e9-0dcf-4570dfd42a8c"
1616
Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
1717

1818
[compat]
19-
DelayDiffEq = "5"
20-
DiffEqBase = "6.11"
21-
DiffEqNoiseProcess = "3.3, 4.0, 5.0"
19+
DelayDiffEq = "5.20"
20+
DiffEqBase = "6.40"
21+
DiffEqNoiseProcess = "5.0"
2222
DiffEqProblemLibrary = "4.5"
2323
NLsolve = "4.2"
2424
RecipesBase = "0.7, 0.8, 1.0"
@@ -33,7 +33,8 @@ OrdinaryDiffEq = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed"
3333
ParameterizedFunctions = "65888b18-ceab-5e60-b2b9-181511a3b968"
3434
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
3535
StochasticDiffEq = "789caeaf-c7a9-5a7d-9973-96adeb23e2a0"
36+
StochasticDelayDiffEq = "29a0d76e-afc8-11e9-03a4-eda52ae4b960"
3637
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
3738

3839
[targets]
39-
test = ["DelayDiffEq", "DiffEqProblemLibrary", "OrdinaryDiffEq", "ParameterizedFunctions", "Random", "StochasticDiffEq", "Test"]
40+
test = ["DelayDiffEq", "DiffEqProblemLibrary", "OrdinaryDiffEq", "ParameterizedFunctions", "Random", "StochasticDiffEq", "StochasticDelayDiffEq", "Test"]

src/DiffEqDevTools.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import Base: length
1010

1111
import DiffEqBase: AbstractODEProblem, AbstractDDEProblem,
1212
AbstractODESolution, AbstractRODEProblem, AbstractSDEProblem,
13+
AbstractSDDEProblem,
1314
AbstractDAEProblem, @def, ConvergenceSetup, DEAlgorithm,
1415
ODERKTableau, AbstractTimeseriesSolution, ExplicitRKTableau,
1516
ImplicitRKTableau

src/convergence.jl

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ function test_convergence(dts::AbstractArray,prob::Union{AbstractRODEProblem,Abs
5757
end
5858

5959
function analyticless_test_convergence(dts::AbstractArray,
60-
prob::Union{AbstractRODEProblem,AbstractSDEProblem},
60+
prob::Union{AbstractRODEProblem,AbstractSDEProblem,AbstractSDDEProblem},
6161
alg,test_dt;trajectories=100,
6262
save_everystep=true,timeseries_steps=1,
6363
timeseries_errors=save_everystep,adaptive=false,
@@ -76,9 +76,18 @@ function analyticless_test_convergence(dts::AbstractArray,
7676
brownian_values2 = cumsum([[zeros(size(prob.noise_rate_prototype,2))];[sqrt(test_dt)*randn(size(prob.noise_rate_prototype,2)) for i in 1:length(t)-1]])
7777
end
7878
np = NoiseGrid(t,brownian_values,brownian_values2)
79-
_prob = SDEProblem(prob.f,prob.g,prob.u0,prob.tspan,
79+
80+
if prob isa AbstractSDDEProblem
81+
_prob = SDDEProblem(prob.f,prob.g,prob.u0,prob.h,prob.tspan,prob.p,
82+
noise = np, noise_rate_prototype = prob.noise_rate_prototype,
83+
constant_lags = prob.constant_lags, dependent_lags = prob.dependent_lags,
84+
neutral = prob.neutral, order_discontinuity_t0 = prob.order_discontinuity_t0, prob.kwargs...);
85+
else
86+
_prob = SDEProblem(prob.f,prob.g,prob.u0,prob.tspan,prob.p,
8087
noise=np,
8188
noise_rate_prototype=prob.noise_rate_prototype);
89+
end
90+
8291
true_sol = solve(_prob,alg;adaptive=adaptive,dt=test_dt);
8392

8493
for i in 1:length(dts)

test/analyticless_convergence_tests.jl

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using OrdinaryDiffEq, ParameterizedFunctions, Test, Random
1+
using OrdinaryDiffEq, StochasticDelayDiffEq, ParameterizedFunctions, Test, Random
22
using ParameterizedFunctions.ModelingToolkit # macro hygiene
33
f = @ode_def LotkaVolterra begin
44
dx = 1.5x - x*y
@@ -39,3 +39,25 @@ test_dt = 1/2^8
3939
sim2 = analyticless_test_convergence(dts,prob,SRIW1(),test_dt,trajectories=100, use_noise_grid=false)
4040
@test abs(sim2.𝒪est[:final]-1.5) < 0.3
4141
@show sim2.𝒪est[:final]
42+
43+
### SDDE
44+
45+
function hayes_modelf(du,u,h,p,t)
46+
τ,a,b,c,α,β,γ = p
47+
du .= a.*u .+ b .* h(p,t-τ) .+ c
48+
end
49+
function hayes_modelg(du,u,h,p,t)
50+
τ,a,b,c,α,β,γ = p
51+
du .= α.*u .+ β.*h(p,t-τ) .+ γ
52+
end
53+
h(p,t) = (ones(1) .+ t);
54+
tspan = (0.,10.)
55+
56+
pmul = [1.0,-4.,-2.,10.,-1.3,-1.2, 1.1]
57+
padd = [1.0,-4.,-2.,10.,-0.0,-0.0, 0.1]
58+
59+
prob = SDDEProblem(hayes_modelf, hayes_modelg, [1.], h, tspan, pmul; constant_lags = (pmul[1],));
60+
dts = (1/2).^(7:-1:3)
61+
test_dt = 1/2^8
62+
sim2 = analyticless_test_convergence(dts,prob,RKMil(),test_dt,trajectories=100, use_noise_grid=false)
63+
@test abs(sim2.𝒪est[:final]-1.0) < 0.3

0 commit comments

Comments
 (0)