Skip to content

Commit

Permalink
fix tests
Browse files Browse the repository at this point in the history
  • Loading branch information
ChrisRackauckas committed Jul 25, 2018
1 parent 6401d0e commit 068a508
Show file tree
Hide file tree
Showing 5 changed files with 80 additions and 55 deletions.
26 changes: 13 additions & 13 deletions src/perform_step/iif.jl
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ mutable struct RHS_IIF1M_Scalar{F,CType,tType,P} <: Function
end

function (f::RHS_IIF1M_Scalar)(resid,u)
resid[1] .= u[1] - f.tmp - f.dt*f.f[2](u[1],f.p,f.t+f.dt)[1]
resid[1] = u[1] - f.tmp - f.dt*f.f.f2(u[1],f.p,f.t+f.dt)[1]
end

mutable struct RHS_IIF2M_Scalar{F,CType,tType,P} <: Function
Expand All @@ -19,7 +19,7 @@ mutable struct RHS_IIF2M_Scalar{F,CType,tType,P} <: Function
end

function (f::RHS_IIF2M_Scalar)(resid,u)
resid[1] = u[1] - f.tmp - 0.5f.dt*f.f[2](u[1],f.p,f.t+f.dt)[1]
resid[1] = u[1] - f.tmp - 0.5f.dt*f.f.f2(u[1],f.p,f.t+f.dt)[1]
end

@muladd function initialize!(integrator,cache::Union{IIF1MConstantCache,IIF2MConstantCache,IIF1MilConstantCache},f=integrator.f)
Expand All @@ -30,13 +30,13 @@ end
@unpack t,dt,uprev,u,W,p = integrator
@unpack uhold,rhs,nl_rhs = cache
alg = unwrap_alg(integrator, true)
A = integrator.f[1](u,p,t)
A = integrator.f.f1(u,p,t)
if typeof(cache) <: IIF1MilConstantCache
error("Milstein correction does not work.")
elseif typeof(cache) <: IIF1MConstantCache
tmp = expm(A*dt)*(uprev + integrator.g(uprev,p,t)*W.dW)
tmp = exp(A*dt)*(uprev + integrator.g(uprev,p,t)*W.dW)
elseif typeof(cache) <: IIF2MConstantCache
tmp = expm(A*dt)*(uprev + 0.5dt*integrator.f[2](uprev,p,t) + integrator.g(uprev,p,t)*W.dW)
tmp = exp(A*dt)*(uprev + 0.5dt*integrator.f.f2(uprev,p,t) + integrator.g(uprev,p,t)*W.dW)
end

if integrator.iter > 1 && !integrator.u_modified
Expand Down Expand Up @@ -64,7 +64,7 @@ end
function (f::RHS_IIF1)(resid,u)
_du = get_du(f.dual_cache, eltype(u))
du = reinterpret(eltype(u),_du)
f.f[2](du,reshape(u,f.sizeu),f.p,f.t+f.dt)
f.f.f2(du,reshape(u,f.sizeu),f.p,f.t+f.dt)
@. resid = u - f.tmp - f.dt*du
end

Expand All @@ -80,7 +80,7 @@ end
function (f::RHS_IIF2)(resid,u)
_du = get_du(f.dual_cache, eltype(u))
du = reinterpret(eltype(u),_du)
f.f[2](du,reshape(u,f.sizeu),f.p,f.t+f.dt)
f.f.f2(du,reshape(u,f.sizeu),f.p,f.t+f.dt)
@. resid = u - f.tmp - 0.5f.dt*du
end

Expand All @@ -102,12 +102,12 @@ end
rtmp3 .+= uprev

if typeof(cache) <: IIF2MCache
integrator.f[2](rtmp1,uprev,p,t)
integrator.f.f2(rtmp1,uprev,p,t)
@. rtmp3 = @muladd 0.5dt*rtmp1 + rtmp3
end

A = integrator.f[1](rtmp1,uprev,p,t)
M = expm(A*dt)
A = integrator.f.f1(rtmp1,uprev,p,t)
M = exp(A*dt)
mul!(tmp,M,rtmp3)

if integrator.iter > 1 && !integrator.u_modified
Expand All @@ -134,8 +134,8 @@ end
dW = W.dW; sqdt = integrator.sqdt
f = integrator.f; g = integrator.g

A = integrator.f[1](t,uprev,rtmp1)
M = expm(A*dt)
A = integrator.f.f1(t,uprev,rtmp1)
M = exp(A*dt)

uidx = eachindex(u)
integrator.g(rtmp2,uprev,p,t)
Expand Down Expand Up @@ -168,7 +168,7 @@ end
end

if typeof(cache) <: IIF2MCache
integrator.f[2](t,uprev,rtmp1)
integrator.f.f2(t,uprev,rtmp1)
@. rtmp1 = @muladd 0.5dt*rtmp1 + uprev + rtmp3
mul!(tmp,M,rtmp1)
elseif !(typeof(cache) <: IIF1MilCache)
Expand Down
30 changes: 18 additions & 12 deletions test/iif_methods.jl
Original file line number Diff line number Diff line change
@@ -1,26 +1,30 @@
using DiffEqBase, StochasticDiffEq, DiffEqNoiseProcess,
Test, DiffEqDevTools
Test, DiffEqDevTools, Random, LinearAlgebra
const μ = 1.01
const σ_const = 0.87

f(u,p,t) = μ * u + μ * u
f1_μ(u,p,t) = μ
(::typeof(f1_μ))(::Type{Val{:analytic}},u0,p,t,W) = u0.*exp.((2μ-(σ_const^2)/2)t+σ_const*W)
f1_μ_analytic(u0,p,t,W) = u0.*exp.((2μ-(σ_const^2)/2)t+σ_const*W)
f2(u,p,t) = μ * u
σ(u,p,t) = σ_const*u
no_noise(u,p,t) = 0.0
f1_no_noise(u,p,t) = μ
(::typeof(f1_no_noise))(::Type{Val{:analytic}},u0,p,t,W) = u0.*exp.(2μ*t)
f1_no_noise_analytic(u0,p,t,W) = u0.*exp.(2μ*t)

prob = SplitSDEProblem{false}(f1_μ,f2,σ,1/2,(0.0,1.0))
no_noise_prob = SplictSDEProblem{false}(f1_no_noise,f2,no_noise,1/2,(0.0,1.0))
ff1_μ = SplitSDEFunction(f1_μ,f2,σ,analytic=f1_μ_analytic)
prob = SDEProblem(ff1_μ,σ,1/2,(0.0,1.0))
ff1_no_noise = SplitSDEFunction(f1_no_noise,f2,no_noise,analytic=f1_no_noise_analytic)
no_noise_prob = SDEProblem(ff1_no_noise,no_noise,1/2,(0.0,1.0))

sol = solve(prob,IIF1M(),dt=1/10)

prob2 = SDEProblem{false}(f,σ,1/2,(0.0,1.0),noise = NoiseWrapper(sol.W))

sol2 = solve(prob2,EM(),dt=1/10)

sol = solve(no_noise_prob,IIF1M(),dt=1/10)

srand(100)
dts = (1/2) .^ (7:-1:4) #14->7 good plot
println("IIF scalar")
Expand All @@ -29,7 +33,7 @@ sim = test_convergence(dts,prob,IIF1M(),numMonte=Int(1e2))
sim = test_convergence(dts,no_noise_prob,IIF1M(),numMonte=Int(2e1))
@test abs(sim.𝒪est[:l2]-1.0) < 0.2 # closer to 1 at this part

dts = (1/2) .^(7:-1:4) #14->7 good plot
dts = (1/2) .^ (7:-1:4) #14->7 good plot
println("IIF no noise scalar")
srand(100)
sim = test_convergence(dts,prob,IIF2M(),numMonte=Int(1e2))
Expand Down Expand Up @@ -58,35 +62,37 @@ function σ(du,u,p,t)
mul!(@view(du[:,2]),B,u)
end

function (::typeof(f))(::Type{Val{:analytic}},u0,p,t,W)
function f_analytic(u0,p,t,W)
tmp = (A+1.01I-(B^2))*t + B*sum(W)
exp(tmp)*u0
end

f1_A(du,u,p,t) = A
function (::typeof(f1_A))(::Type{Val{:analytic}},u0,p,t,W)
function f1_A_analytic(u0,p,t,W)
tmp = (A+1.01I-(B^2))*t + B*sum(W)
exp(tmp)*u0
end
f2(du,u,p,t) = du .= μ .* u

prob = SDEProblem((f1_A,f2),σ,u0,(0.0,1.0),noise_rate_prototype=rand(2,2))
ff1_A = SplitSDEFunction(f1_A,f2,σ,analytic=f1_A_analytic)
prob = SDEProblem(ff1_A,σ,u0,(0.0,1.0),noise_rate_prototype=rand(2,2))

f1_no_noise(du,u,p,t) = A
f2(du,u,p,t) = (du .= μ .* u)
function σ22(du,u,p,t)
du .= 0
end
function (::typeof(f1_no_noise))(::Type{Val{:analytic}},u0,p,t,W)
function f1_no_noise_analytic(u0,p,t,W)
tmp = (A+1.01I)*t
exp(tmp)*u0
end
prob_no_noise = SDEProblem((f1_no_noise,f2),σ22,u0,(0.0,1.0),noise_rate_prototype=rand(2,2))
ff1_A = SplitSDEFunction(f1_no_noise,f2,σ22,analytic=f1_no_noise_analytic)
prob_no_noise = SDEProblem(ff1_A,σ22,u0,(0.0,1.0),noise_rate_prototype=rand(2,2))


sol = solve(prob,IIF1M(),dt=1/10)

dts = 1./2.^(8:-1:4) #14->7 good plot
dts = (1/2) .^ (8:-1:4) #14->7 good plot

srand(250)
println("IIF")
Expand Down
2 changes: 1 addition & 1 deletion test/runtests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ is_APPVEYOR = ( Sys.iswindows() && haskey(ENV,"APPVEYOR") )
@time @testset "Non-diagonal SDE Tests" begin include("nondiagonal_tests.jl") end
@time @testset "Rossler Order Tests" begin include("sde/sde_rosslerorder_tests.jl") end
@time @testset "Convergence Tests" begin include("sde/sde_convergence_tests.jl") end
#@time @testset "Split Tests" begin include("split_tests.jl") end
@time @testset "Split Tests" begin include("split_tests.jl") end
@time @testset "Stratonovich Convergence Tests" begin include("stratonovich_convergence_tests.jl") end
@time @testset "IIF Convergence Tests" begin include("iif_methods.jl") end
LONGER_TESTS && @time @testset "Weak Convergence Tests" begin include("weak_convergence.jl") end
Expand Down
34 changes: 19 additions & 15 deletions test/split_tests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ f(u,p,t) = (1.01) * u
f1(u,p,t) = (1.01)/2 * u
f2(u,p,t) = (1.01)/2 * u
σ(u,p,t) = 0.87u
#(::typeof(f))(::Type{Val{:analytic}},u0,p,t,W) = u0.*exp.(0.63155t+0.87W)
f_split_analytic(u0,p,t,W) = u0.*exp.(0.63155t+0.87W)

prob = SplitSDEProblem{false}(f1,f2,σ,1/2,(0.0,1.0))
sol = solve(prob,SplitEM(),dt=1/10,save_noise=true)
Expand All @@ -15,7 +15,9 @@ sol2 = solve(prob,EM(),dt=1/10)
@test sol[:] sol2[:]

u0 = rand(4)
prob = SplitSDEProblem{false}(f1,f2,σ,u0,(0.0,1.0))

ff_split = SplitSDEFunction(f1,f2,σ,analytic=f_split_analytic)
prob = SDEProblem(ff_split,σ,u0,(0.0,1.0))

sol = solve(prob,SplitEM(),dt=1/10,save_noise=true)

Expand All @@ -34,13 +36,15 @@ sol2 = solve(prob,EM(),dt=1/10)
ff1 = (u,p,t) -> β./sqrt.(1+t) - u./(2*(1+t))
ff2 = (u,p,t) -> 0.0
σ2 = (u,p,t) -> α*β./sqrt.(1+t)
prob = SplitSDEProblem(ff1,ff2,σ2,1.,(0.0,1.0))
(::typeof(prob.f))(::Type{Val{:analytic}},u0,p,t,W) = u0./sqrt.(1+t) + β*(t+α*W)./sqrt.(1+t)
ff1_analytic(u0,p,t,W) = @. u0/sqrt(1+t) + β*(t+α*W)/sqrt(1+t)
f_ff1 = SplitSDEFunction(ff1,ff2,σ2,analytic=ff1_analytic)
prob = SDEProblem(f_ff1,σ2,1.,(0.0,1.0))


sol = solve(prob,EM(),dt=1/10)
sol2 = solve(prob,SKenCarp(),dt=1/10)

dts = 1./2.^(10:-1:2) #14->7 good plot
dts = (1/2) .^(10:-1:2) #14->7 good plot
sim10 = test_convergence(dts,prob,SKenCarp(),numMonte=Int(1e1))
@test abs(sim10.𝒪est[:final]-2) < 0.3

Expand All @@ -51,8 +55,8 @@ sim10 = test_convergence(dts,prob,SKenCarp(),numMonte=Int(1e1))
ff1 = (u,p,t) -> 0.0
ff2 = (u,p,t) -> β./sqrt.(1+t) - u./(2*(1+t))
σ2 = (u,p,t) -> α*β./sqrt.(1+t)
prob = SplitSDEProblem(ff1,ff2,σ2,1.,(0.0,1.0))
(::typeof(prob.f))(::Type{Val{:analytic}},u0,p,t,W) = u0./sqrt.(1+t) + β*(t+α*W)./sqrt.(1+t)
f_ff1 = SplitSDEFunction(ff1,ff2,σ2,analytic=ff1_analytic)
prob = SplitSDEProblem(f_ff1,σ2,1.,(0.0,1.0))

sol = solve(prob,EM(),dt=1/10)
sol2 = solve(prob,SKenCarp(),dt=1/10,seed=1)
Expand All @@ -68,8 +72,8 @@ sim10 = test_convergence(dts,prob,SKenCarp(),numMonte=Int(1e1))
ff1 = (u,p,t) -> β./sqrt.(1+t)
ff2 = (u,p,t) -> - u./(2*(1+t))
σ2 = (u,p,t) -> α*β./sqrt.(1+t)
prob = SplitSDEProblem(ff1,ff2,σ2,1.,(0.0,1.0))
(::typeof(prob.f))(::Type{Val{:analytic}},u0,p,t,W) = u0./sqrt.(1+t) + β*(t+α*W)./sqrt.(1+t)
f_ff1 = SplitSDEFunction(ff1,ff2,σ2,analytic=ff1_analytic)
prob = SplitSDEProblem(f_ff1,σ2,1.,(0.0,1.0))

sol = solve(prob,EM(),dt=1/10)
sol2 = solve(prob,SKenCarp(),dt=1/10)
Expand All @@ -87,8 +91,8 @@ sim10 = test_convergence(dts,prob,SKenCarp(),numMonte=Int(1e1))
ff1 = (du,u,p,t) -> du .= β./sqrt.(1+t) - u./(2*(1+t))
ff2 = (du,u,p,t) -> du .= 0.0
σ2 = (du,u,p,t) -> du .= α*β./sqrt.(1+t)
prob = SplitSDEProblem(ff1,ff2,σ2,[1.],(0.0,1.0))
(::typeof(prob.f))(::Type{Val{:analytic}},u0,p,t,W) = u0./sqrt.(1+t) + β*(t+α*W)./sqrt.(1+t)
f_ff1 = SplitSDEFunction(ff1,ff2,σ2,analytic=ff1_analytic)
prob = SplitSDEProblem(f_ff1,σ2,[1.],(0.0,1.0))

sol = solve(prob,EM(),dt=1/10)
sol2 = solve(prob,SKenCarp(),dt=1/10)
Expand All @@ -104,8 +108,8 @@ sim10 = test_convergence(dts,prob,SKenCarp(),numMonte=Int(1e1))
ff1 = (du,u,p,t) -> du .= 0.0
ff2 = (du,u,p,t) -> du .= β./sqrt.(1+t) - u./(2*(1+t))
σ2 = (du,u,p,t) -> du .= α*β./sqrt.(1+t)
prob = SplitSDEProblem(ff1,ff2,σ2,[1.],(0.0,1.0))
(::typeof(prob.f))(::Type{Val{:analytic}},u0,p,t,W) = u0./sqrt.(1+t) + β*(t+α*W)./sqrt.(1+t)
f_ff1 = SplitSDEFunction(ff1,ff2,σ2,analytic=ff1_analytic)
prob = SplitSDEProblem(f_ff1,σ2,[1.],(0.0,1.0))

sol = solve(prob,EM(),dt=1/10)
sol2 = solve(prob,SKenCarp(),dt=1/10)
Expand All @@ -121,8 +125,8 @@ sim10 = test_convergence(dts,prob,SKenCarp(),numMonte=Int(1e1))
ff1 = (du,u,p,t) -> du .= β./sqrt.(1+t)
ff2 = (du,u,p,t) -> du .= - u./(2*(1+t))
σ2 = (du,u,p,t) -> du .= α*β./sqrt.(1+t)
prob = SplitSDEProblem(ff1,ff2,σ2,[1.],(0.0,1.0))
(::typeof(prob.f))(::Type{Val{:analytic}},u0,p,t,W) = u0./sqrt.(1+t) + β*(t+α*W)./sqrt.(1+t)
f_ff1 = SplitSDEFunction(ff1,ff2,σ2,analytic=ff1_analytic)
prob = SplitSDEProblem(f_ff1,σ2,[1.],(0.0,1.0))

sol = solve(prob,EM(),dt=1/10)
sol2 = solve(prob,SKenCarp(),dt=1/10)
Expand Down
43 changes: 29 additions & 14 deletions test/weak_convergence.jl
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using Distributed
@everywhere using StochasticDiffEq, DiffEqDevTools, Test
@everywhere using DiffEqProblemLibrary.SDEProblemLibrary: importsdeproblems
@everywhere importsdeproblems()
Expand All @@ -6,65 +7,79 @@ srand(100)
dts = 1./2.^(10:-1:2) #14->7 good plot

prob = prob_sde_linear
sim = test_convergence(dts,prob,EM(),numMonte=Int(1e4),weak_timeseries_errors=true,weak_dense_errors=true)
sim = test_convergence(dts,prob,EM(),numMonte=Int(1e4),
weak_timeseries_errors=true,weak_dense_errors=true)
@test abs(sim.𝒪est[:weak_final]-1) < 0.3
@test abs(sim.𝒪est[:weak_l2]-1) < 0.3
@test abs(sim.𝒪est[:weak_l∞]-1) < 0.3
@test abs(sim.𝒪est[:weak_L2]-1) < 0.3
@test abs(sim.𝒪est[:weak_L∞]-1) < 0.3
sim2 = test_convergence(dts,prob,RKMil(),numMonte=Int(1e4),weak_timeseries_errors=true,dense_errors=true)
sim2 = test_convergence(dts,prob,RKMil(),numMonte=Int(1e4),
weak_timeseries_errors=true,dense_errors=true)
@test abs(sim2.𝒪est[:weak_final]-1) < 0.3
@test abs(sim2.𝒪est[:weak_l2]-1) < 0.3
@test abs(sim2.𝒪est[:weak_l∞]-1) < 0.3
sim3 = test_convergence(dts,prob,SRI(),numMonte=Int(1e4),weak_timeseries_errors=true)
sim3 = test_convergence(dts,prob,SRI(),numMonte=Int(1e4),
weak_timeseries_errors=true)
@test abs(sim3.𝒪est[:weak_final]-2) < 0.3
@test abs(sim3.𝒪est[:weak_l2]-2) < 0.3
@test abs(sim3.𝒪est[:weak_l∞]-2) < 0.3
sim4 = test_convergence(dts,prob,SRIW1(),numMonte=Int(1e4),weak_timeseries_errors=true)
sim4 = test_convergence(dts,prob,SRIW1(),numMonte=Int(1e4),
weak_timeseries_errors=true)
@test abs(sim4.𝒪est[:weak_final]-2) < 0.3
@test abs(sim4.𝒪est[:weak_l2]-2) < 0.3
@test abs(sim4.𝒪est[:weak_l∞]-2) < 0.3

prob = prob_sde_2Dlinear
sim = test_convergence(dts,prob,EM(),numMonte=Int(1e4),weak_timeseries_errors=true)
sim = test_convergence(dts,prob,EM(),numMonte=Int(1e4),
weak_timeseries_errors=true)
@test abs(sim.𝒪est[:weak_final]-1) < 0.3
@test abs(sim.𝒪est[:weak_l2]-1) < 0.3
@test abs(sim.𝒪est[:weak_l∞]-1) < 0.3
sim2 = test_convergence(dts,prob,RKMil(),numMonte=Int(1e4),weak_timeseries_errors=true)
sim2 = test_convergence(dts,prob,RKMil(),numMonte=Int(1e4),
weak_timeseries_errors=true)
@test abs(sim2.𝒪est[:weak_final]-1) < 0.3
@test abs(sim2.𝒪est[:weak_l2]-1) < 0.3
@test abs(sim2.𝒪est[:weak_l∞]-1) < 0.3
sim3 = test_convergence(dts,prob,SRI(),numMonte=Int(1e4),weak_timeseries_errors=true)
sim3 = test_convergence(dts,prob,SRI(),numMonte=Int(1e4),
weak_timeseries_errors=true)
@test abs(sim3.𝒪est[:weak_final]-2) < 0.3
@test abs(sim3.𝒪est[:weak_l2]-2) < 0.3
@test abs(sim3.𝒪est[:weak_l∞]-2) < 0.3
sim4 = test_convergence(dts,prob,SRIW1(),numMonte=Int(1e4),weak_timeseries_errors=true)
sim4 = test_convergence(dts,prob,SRIW1(),numMonte=Int(1e4),
weak_timeseries_errors=true)
@test abs(sim4.𝒪est[:weak_final]-2) < 0.3
@test abs(sim4.𝒪est[:weak_l2]-2) < 0.3
@test abs(sim4.𝒪est[:weak_l∞]-2) < 0.35

prob = prob_sde_additive
sim = test_convergence(dts,prob,EM(),numMonte=Int(1e4),weak_timeseries_errors=true)
sim = test_convergence(dts,prob,EM(),numMonte=Int(1e4),
weak_timeseries_errors=true)
@test abs(sim.𝒪est[:weak_final]-1) < 0.3
@test abs(sim.𝒪est[:weak_l2]-1) < 0.3
@test abs(sim.𝒪est[:weak_l∞]-1) < 0.3
sim2 = test_convergence(dts,prob,RKMil(),numMonte=Int(1e4),weak_timeseries_errors=true)
sim2 = test_convergence(dts,prob,RKMil(),numMonte=Int(1e4),
weak_timeseries_errors=true)
@test abs(sim2.𝒪est[:weak_final]-1) < 0.3
@test abs(sim2.𝒪est[:weak_l2]-1) < 0.3
@test abs(sim2.𝒪est[:weak_l∞]-1) < 0.3
sim3 = test_convergence(dts,prob,SRI(),numMonte=Int(1e4),weak_timeseries_errors=true)
sim3 = test_convergence(dts,prob,SRI(),numMonte=Int(1e4),
weak_timeseries_errors=true)
@test abs(sim3.𝒪est[:weak_final]-2) < 0.3
@test abs(sim3.𝒪est[:weak_l2]-2) < 0.3
@test abs(sim3.𝒪est[:weak_l∞]-2) < 0.3
sim4 = test_convergence(dts,prob,SRIW1(),numMonte=Int(1e4),weak_timeseries_errors=true)
sim4 = test_convergence(dts,prob,SRIW1(),numMonte=Int(1e4),
weak_timeseries_errors=true)
@test abs(sim4.𝒪est[:weak_final]-2) < 0.3
@test abs(sim4.𝒪est[:weak_l2]-2) < 0.3
@test abs(sim4.𝒪est[:weak_l∞]-2) < 0.35
sim5 = test_convergence(dts,prob,SRA(),numMonte=Int(1e4),weak_timeseries_errors=true)
sim5 = test_convergence(dts,prob,SRA(),numMonte=Int(1e4),
weak_timeseries_errors=true)
@test abs(sim5.𝒪est[:weak_final]-2) < 0.3
@test abs(sim5.𝒪est[:weak_l2]-2) < 0.3
@test abs(sim5.𝒪est[:weak_l∞]-2) < 0.3
sim6 = test_convergence(dts,prob,SRA1(),numMonte=Int(1e4),weak_timeseries_errors=true)
sim6 = test_convergence(dts,prob,SRA1(),numMonte=Int(1e4),
weak_timeseries_errors=true)
@test abs(sim6.𝒪est[:weak_final]-2) < 0.3
@test abs(sim6.𝒪est[:weak_l2]-2) < 0.3
@test abs(sim6.𝒪est[:weak_l∞]-2) < 0.3

0 comments on commit 068a508

Please sign in to comment.