Skip to content

Commit a6b420a

Browse files
Merge pull request #1141 from anandijain/aj/sde
shorthand ode->sde
2 parents 2e3e7f2 + d311849 commit a6b420a

File tree

3 files changed

+13
-1
lines changed

3 files changed

+13
-1
lines changed

docs/src/systems/SDESystem.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@
66
SDESystem
77
```
88

9+
To convert an `ODESystem` to an `SDESystem` directly:
10+
```
11+
ode = ODESystem(eqs,t,[x,y,z],[σ,ρ,β])
12+
sde = SDESystem(ode, noiseeqs)
13+
```
14+
915
## Composition and Accessor Functions
1016

1117
- `get_eqs(sys)` or `equations(sys)`: The equations that define the SDE.

src/systems/diffeqs/sdesystem.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,8 @@ function SDESystem(deqs::AbstractVector{<:Equation}, neqs, iv, dvs, ps;
132132
SDESystem(deqs, neqs, iv′, dvs′, ps′, var_to_name, ctrl′, observed, tgrad, jac, ctrl_jac, Wfact, Wfact_t, name, systems, defaults, connection_type)
133133
end
134134

135+
SDESystem(sys::ODESystem, neqs; kwargs...) = SDESystem(equations(sys), neqs, independent_variable(sys), states(sys), parameters(sys); kwargs...)
136+
135137
function generate_diffusion_function(sys::SDESystem, dvs = states(sys), ps = parameters(sys); kwargs...)
136138
return build_function(get_noiseeqs(sys),
137139
map(x->time_varying_as_func(value(x), sys), dvs),

test/sdesystem.jl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ noiseeqs = [0.1*x,
1515
0.1*y,
1616
0.1*z]
1717

18+
# ODESystem -> SDESystem shorthand constructor
19+
sys = ODESystem(eqs,t,[x,y,z],[σ,ρ,β])
20+
@test SDESystem(sys, noiseeqs) isa SDESystem
21+
1822
de = SDESystem(eqs,noiseeqs,t,[x,y,z],[σ,ρ,β])
1923
f = eval(generate_diffusion_function(de)[1])
2024
@test f(ones(3),rand(3),nothing) == 0.1ones(3)
@@ -442,4 +446,4 @@ fdif!(du,u0,p,t)
442446
sys1 = SDESystem(eqs_short, noiseeqs, t, [x, y, z], [σ, ρ, β], name = :sys1)
443447
sys2 = SDESystem(eqs_short, noiseeqs, t, [x, y, z], [σ, ρ, β], name = :sys1)
444448
@test_throws ArgumentError SDESystem([sys2.y ~ sys1.z], t, [], [], [], systems = [sys1, sys2])
445-
end
449+
end

0 commit comments

Comments
 (0)