Skip to content

Commit 720e517

Browse files
automated noise rate prototype
1 parent 5b5b433 commit 720e517

File tree

2 files changed

+35
-2
lines changed

2 files changed

+35
-2
lines changed

src/systems/diffeqs/sdesystem.jl

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ function DiffEqBase.SDEProblem{iip}(sys::SDESystem,u0map,tspan,p=parammap;
161161
version = nothing, tgrad=false,
162162
jac = false, Wfact = false,
163163
checkbounds = false, sparse = false,
164+
sparsenoise = sparse,
164165
linenumbers = true, parallel=SerialForm(),
165166
kwargs...)
166167
```
@@ -172,6 +173,7 @@ function DiffEqBase.SDEProblem{iip}(sys::SDESystem,u0map,tspan,parammap=DiffEqBa
172173
version = nothing, tgrad=false,
173174
jac = false, Wfact = false,
174175
checkbounds = false, sparse = false,
176+
sparsenoise = sparse,
175177
linenumbers = true, parallel=SerialForm(),
176178
kwargs...) where iip
177179

@@ -180,7 +182,16 @@ function DiffEqBase.SDEProblem{iip}(sys::SDESystem,u0map,tspan,parammap=DiffEqBa
180182
sparse=sparse)
181183
u0 = varmap_to_vars(u0map,states(sys))
182184
p = varmap_to_vars(parammap,parameters(sys))
183-
SDEProblem(f,f.g,u0,tspan,p;kwargs...)
185+
if typeof(sys.noiseeqs) <: AbstractVector
186+
noise_rate_prototype = nothing
187+
elseif sparsenoise
188+
I,J,V = findnz(SparseArrays.sparse(sys.noiseeqs))
189+
noise_rate_prototype = SparseArrays.sparse(I,J,zero(eltype(u0)))
190+
else
191+
noise_rate_prototype = zeros(eltype(u0),size(sys.noiseeqs))
192+
end
193+
194+
SDEProblem(f,f.g,u0,tspan,p;noise_rate_prototype=noise_rate_prototype,kwargs...)
184195
end
185196

186197
function DiffEqBase.SDEProblem(sys::SDESystem, args...; kwargs...)

test/sdesystem.jl

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
using ModelingToolkit, StaticArrays, LinearAlgebra
2-
using DiffEqBase, StochasticDiffEq
2+
using DiffEqBase, StochasticDiffEq, SparseArrays
33
using Test
44

55
# Define some variables
@@ -43,3 +43,25 @@ f = SDEFunction(de)
4343
prob = SDEProblem(SDEFunction(de),f.g,[1.0,0.0,0.0],(0.0,100.0),(10.0,26.0,2.33),
4444
noise_rate_prototype = zeros(3,3))
4545
sol = solve(prob,EM(),dt=0.001)
46+
47+
u0map = [
48+
x => 1.0,
49+
y => 0.0,
50+
z => 0.0
51+
]
52+
53+
parammap = [
54+
σ => 10.0,
55+
β => 26.0,
56+
ρ => 2.33
57+
]
58+
59+
prob = SDEProblem(de,u0map,(0.0,100.0),parammap)
60+
@test size(prob.noise_rate_prototype) == (3,3)
61+
@test prob.noise_rate_prototype isa Matrix
62+
sol = solve(prob,EM(),dt=0.001)
63+
64+
prob = SDEProblem(de,u0map,(0.0,100.0),parammap,sparsenoise=true)
65+
@test size(prob.noise_rate_prototype) == (3,3)
66+
@test prob.noise_rate_prototype isa SparseMatrixCSC
67+
sol = solve(prob,EM(),dt=0.001)

0 commit comments

Comments
 (0)