|
1 |
| -using StochasticDiffEq |
| 1 | +using StochasticDiffEq, DiffEqNoiseProcess, Random, Test |
| 2 | +Random.seed!(100) |
2 | 3 |
|
3 | 4 | f(u,p,t,W) = 1.01u.+0.87u.*W
|
4 | 5 | u0 = 1.00
|
5 | 6 | tspan = (0.0,1.0)
|
6 | 7 | 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)) |
8 | 10 | sol2 = solve(prob,RandomHeun(),dt=1/100)
|
| 11 | +@test abs(sol[end] - sol2[end]) < 0.1 |
9 | 12 |
|
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) |
11 | 14 | 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)) |
14 | 18 | sol2 = solve(prob,RandomHeun(),dt=1/100)
|
| 19 | +@test sum(abs,sol[end]-sol2[end]) < 0.1 * sum(abs, sol[end]) |
15 | 20 |
|
16 | 21 | f(u,p,t,W) = 2u*sin(W)
|
17 | 22 | u0 = 1.00
|
18 | 23 | tspan = (0.0,5.0)
|
19 | 24 | 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)) |
21 | 27 | sol2 = solve(prob,RandomHeun(),dt=1/100)
|
| 28 | +@test abs(sol[end]-sol2[end]) < 0.1 |
22 | 29 |
|
23 | 30 | function f(du,u,p,t,W)
|
24 | 31 | du[1] = 2u[1]*sin(W[1] - W[2])
|
25 | 32 | du[2] = -2u[2]*cos(W[1] + W[2])
|
26 | 33 | end
|
27 | 34 | u0 = [1.00;1.00]
|
28 |
| -tspan = (0.0,5.0) |
| 35 | +tspan = (0.0,4.0) |
29 | 36 | 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)) |
31 | 39 | sol2 = solve(prob,RandomHeun(),dt=1/100)
|
| 40 | +@test sum(abs,sol[end]-sol2[end]) < 0.1 * sum(abs, sol[end]) |
32 | 41 |
|
33 | 42 | function f(du,u,p,t,W)
|
34 | 43 | du[1] = -2W[3]*u[1]*sin(W[1] - W[2])
|
|
37 | 46 | u0 = [1.00;1.00]
|
38 | 47 | tspan = (0.0,5.0)
|
39 | 48 | 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)) |
41 | 51 | sol2 = solve(prob,RandomHeun(),dt=1/100)
|
| 52 | +@test sum(abs,sol[end]-sol2[end]) < 0.1 * sum(abs, sol[end]) |
0 commit comments