Skip to content

Commit cf5c12b

Browse files
committed
add basic comparison tests for RODE solvers
1 parent 6d81d64 commit cf5c12b

File tree

1 file changed

+20
-9
lines changed

1 file changed

+20
-9
lines changed

test/rode_linear_tests.jl

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,43 @@
1-
using StochasticDiffEq
1+
using StochasticDiffEq, DiffEqNoiseProcess, Random, Test
2+
Random.seed!(100)
23

34
f(u,p,t,W) = 1.01u.+0.87u.*W
45
u0 = 1.00
56
tspan = (0.0,1.0)
67
prob = RODEProblem(f,u0,tspan)
7-
sol = solve(prob,RandomEM(),dt=1/100)
8+
sol = solve(prob,RandomEM(),dt=1/100, save_noise=true)
9+
prob = RODEProblem(f,u0,tspan, noise=NoiseWrapper(sol.W))
810
sol2 = solve(prob,RandomHeun(),dt=1/100)
11+
@test abs(sol[end] - sol2[end]) < 0.1
912

10-
f(u,p,t,W,du) = (du.=1.01u.+0.87u.*W)
13+
f!(du,u,p,t,W) = (du.=1.01u.+0.87u.*W)
1114
u0 = ones(4)
12-
prob = RODEProblem(f,u0,tspan)
13-
sol = solve(prob,RandomEM(),dt=1/100)
15+
prob = RODEProblem(f!,u0,tspan)
16+
sol = solve(prob,RandomEM(),dt=1/100, save_noise=true)
17+
prob = RODEProblem(f!,u0,tspan, noise=NoiseWrapper(sol.W))
1418
sol2 = solve(prob,RandomHeun(),dt=1/100)
19+
@test sum(abs,sol[end]-sol2[end]) < 0.1 * sum(abs, sol[end])
1520

1621
f(u,p,t,W) = 2u*sin(W)
1722
u0 = 1.00
1823
tspan = (0.0,5.0)
1924
prob = RODEProblem{false}(f,u0,tspan)
20-
sol = solve(prob,RandomEM(),dt=1/100)
25+
sol = solve(prob,RandomEM(),dt=1/100, save_noise=true)
26+
prob = RODEProblem{false}(f,u0,tspan, noise=NoiseWrapper(sol.W))
2127
sol2 = solve(prob,RandomHeun(),dt=1/100)
28+
@test abs(sol[end]-sol2[end]) < 0.1
2229

2330
function f(du,u,p,t,W)
2431
du[1] = 2u[1]*sin(W[1] - W[2])
2532
du[2] = -2u[2]*cos(W[1] + W[2])
2633
end
2734
u0 = [1.00;1.00]
28-
tspan = (0.0,5.0)
35+
tspan = (0.0,4.0)
2936
prob = RODEProblem(f,u0,tspan)
30-
sol = solve(prob,RandomEM(),dt=1/100)
37+
sol = solve(prob,RandomEM(),dt=1/100, save_noise=true)
38+
prob = RODEProblem(f,u0,tspan, noise=NoiseWrapper(sol.W))
3139
sol2 = solve(prob,RandomHeun(),dt=1/100)
40+
@test sum(abs,sol[end]-sol2[end]) < 0.1 * sum(abs, sol[end])
3241

3342
function f(du,u,p,t,W)
3443
du[1] = -2W[3]*u[1]*sin(W[1] - W[2])
@@ -37,5 +46,7 @@ end
3746
u0 = [1.00;1.00]
3847
tspan = (0.0,5.0)
3948
prob = RODEProblem(f,u0,tspan,rand_prototype=zeros(3))
40-
sol = solve(prob,RandomEM(),dt=1/100)
49+
sol = solve(prob,RandomEM(),dt=1/100, save_noise=true)
50+
prob = RODEProblem(f,u0,tspan, noise=NoiseWrapper(sol.W))
4151
sol2 = solve(prob,RandomHeun(),dt=1/100)
52+
@test sum(abs,sol[end]-sol2[end]) < 0.1 * sum(abs, sol[end])

0 commit comments

Comments
 (0)