@@ -61,28 +61,46 @@ function analyticless_test_convergence(dts::AbstractArray,
61
61
alg,test_dt;trajectories= 100 ,
62
62
save_everystep= true ,timeseries_steps= 1 ,
63
63
timeseries_errors= save_everystep,adaptive= false ,
64
- weak_timeseries_errors= false ,weak_dense_errors= false ,kwargs... )
64
+ weak_timeseries_errors= false ,weak_dense_errors= false ,use_noise_grid = true , kwargs... )
65
65
_solutions = []
66
66
tmp_solutions = Array {Any} (undef,trajectories,length (dts))
67
67
for j in 1 : trajectories
68
68
@info " Monte Carlo iteration: $j /$trajectories "
69
69
t = prob. tspan[1 ]: test_dt: prob. tspan[2 ]
70
- if prob. noise_rate_prototype === nothing
71
- brownian_values = cumsum ([[zeros (size (prob. u0))];[sqrt (test_dt)* randn (size (prob. u0)) for i in 1 : length (t)- 1 ]])
72
- brownian_values2 = cumsum ([[zeros (size (prob. u0))];[sqrt (test_dt)* randn (size (prob. u0)) for i in 1 : length (t)- 1 ]])
70
+ if use_noise_grid
71
+ if prob. noise_rate_prototype === nothing
72
+ brownian_values = cumsum ([[zeros (size (prob. u0))];[sqrt (test_dt)* randn (size (prob. u0)) for i in 1 : length (t)- 1 ]])
73
+ brownian_values2 = cumsum ([[zeros (size (prob. u0))];[sqrt (test_dt)* randn (size (prob. u0)) for i in 1 : length (t)- 1 ]])
74
+ else
75
+ brownian_values = 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 ]])
76
+ 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 ]])
77
+ end
78
+ np = NoiseGrid (t,brownian_values,brownian_values2)
79
+ _prob = SDEProblem (prob. f,prob. g,prob. u0,prob. tspan,
80
+ noise= np,
81
+ noise_rate_prototype= prob. noise_rate_prototype);
82
+ true_sol = solve (_prob,alg;adaptive= adaptive,dt= test_dt);
83
+
84
+ for i in 1 : length (dts)
85
+ sol = solve (_prob,alg;dt= dts[i],adaptive= adaptive);
86
+ err_sol = appxtrue (sol,true_sol)
87
+ tmp_solutions[j,i] = err_sol
88
+ end
73
89
else
74
- brownian_values = 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 ]])
75
- 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 ]])
76
- end
77
- np = NoiseGrid (t,brownian_values,brownian_values2)
78
- _prob = SDEProblem (prob. f,prob. g,prob. u0,prob. tspan,
79
- noise= np,
80
- noise_rate_prototype= prob. noise_rate_prototype);
81
- true_sol = solve (_prob,alg;adaptive= adaptive,dt= test_dt);
82
- for i in 1 : length (dts)
83
- sol = solve (_prob,alg;dt= dts[i],adaptive= adaptive);
84
- err_sol = appxtrue (sol,true_sol)
85
- tmp_solutions[j,i] = err_sol
90
+ # using NoiseWrapper doesn't lead to constant true_sol
91
+ true_sol = solve (prob,alg;adaptive= adaptive,dt= test_dt, save_noise= true )
92
+ _sol = deepcopy (true_sol)
93
+ W1 = NoiseWrapper (_sol. W)
94
+
95
+ _prob = remake (prob,u0= prob. u0,p= prob. p,tspan= prob. tspan,noise= W1,noise_rate_prototype = prob. noise_rate_prototype)
96
+
97
+ for i in 1 : length (dts)
98
+ W1 = NoiseWrapper (_sol. W)
99
+ _prob = remake (prob,u0= prob. u0,p= prob. p,tspan= prob. tspan,noise= W1,noise_rate_prototype = prob. noise_rate_prototype)
100
+ sol = solve (_prob,alg;dt= dts[i],adaptive= adaptive);
101
+ err_sol = appxtrue (sol,true_sol)
102
+ tmp_solutions[j,i] = err_sol
103
+ end
86
104
end
87
105
end
88
106
_solutions = [EnsembleSolution (tmp_solutions[:,i],0.0 ,true ) for i in 1 : length (dts)]
0 commit comments