# Driftless Stochastic differential equation

**URL:** <https://discourse.julialang.org/t/driftless-stochastic-differential-equation/81525>\
**Category:** Modelling & Simulations\
**Tags:** differentialequation\
**Created:** [May 23, 2022, 5:18pm UTC](https://discourse.julialang.org/t/driftless-stochastic-differential-equation/81525 "2022-05-23T17:18:06Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![stochasticguy](https://avatars.discourse-cdn.com/v4/letter/s/278dde/32.png) [@stochasticguy](https://discourse.julialang.org/u/stochasticguy)\
**Post date:** [May 23, 2022, 5:18pm UTC](https://discourse.julialang.org/t/driftless-stochastic-differential-equation/81525/1 "2022-05-23T17:18:07Z")

</div>

Hi everybody,

I’m using the GREAT StochasticDiffEq.jl package to define a multidimensional driftless SDE as follows:

```julia
using StochasticDiffEq

function f!(du, u, p, t)
    du .= p[1]
    return nothing
end

function g!(du, u, p, t)
    du[1] = p[3] * exp(-p[2] * t) 
    du[2] = p[5] * exp(-p[4] * t) 

    return nothing
end

u0 = [1.0, 0.3]
tspan = (0.0, 1.0)
params = ([0.0, 0.0], 0.2, 0.2, 0.2, 0.1)

sde = SDEProblem(f!, g!, u0, tspan, params)

```

Is there a way of defining the SDE in order to avoid the unnecessary drift computations?

Thanks in advance for your help!

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [May 23, 2022, 8:01pm UTC](https://discourse.julialang.org/t/driftless-stochastic-differential-equation/81525/2 "2022-05-23T20:01:23Z")

</div>

That looks right, just making it zero. Did you profile it? I would suspect that f calls are negligible

---

<div class="post-metadata">

**Author:** ![stochasticguy](https://avatars.discourse-cdn.com/v4/letter/s/278dde/32.png) [@stochasticguy](https://discourse.julialang.org/u/stochasticguy)\
**Post date:** [May 23, 2022, 9:07pm UTC](https://discourse.julialang.org/t/driftless-stochastic-differential-equation/81525/3 "2022-05-23T21:07:48Z")

</div>

Thank you very much for your quick answer, Chris 🙂

Yes, I timed it. By doing:

```julia
du = zeros(eltype(u0), 2)
u = zeros(eltype(u0), 2)
t = 0.1

@btime f!($du, $u, $params, $t)
@btime g!($du, $u, $params, $t)

```

I obtained:

```julia
 6.458 ns (0 allocations: 0 bytes)

```

for `f!`, and:

```julia
 7.375 ns (0 allocations: 0 bytes)

```

for `g!`.

I’m asking about completely removing `f!` computations because my complete setup (which involves simulating 1E6 trajectories) is:

```julia
using StochasticDiffEq

function f!(du, u, p, t)
    du .= p[1]
    return nothing
end

function g!(du, u, p, t)
    du[1] = p[3] * exp(-p[2] * t) 
    du[2] = p[5] * exp(-p[4] * t) 

    return nothing
end

u0 = [1.0, 0.3]
tspan = (0.0, 1.0)
params = ([0.0, 0.0], 0.2, 0.2, 0.2, 0.1)

sde = EnsembleProblem(SDEProblem(f!, g!, u0, tspan, params))

solve(sde, EM(), dt=1 / 200, trajectories=1E6)  

```

and in this case having more than 1E6 evaluations of the zero drift function is not negligible anymore.

---

<div class="post-metadata">

**Author:** ![isaacsas](https://avatars.discourse-cdn.com/v4/letter/i/f6c823/32.png) [@isaacsas](https://discourse.julialang.org/u/isaacsas)\
**Post date:** [May 23, 2022, 10:22pm UTC](https://discourse.julialang.org/t/driftless-stochastic-differential-equation/81525/4 "2022-05-23T22:22:11Z")

</div>

> [@stochasticguy](#):
>
> `f!($du, $u, $params, $t)`

FWIW, on my laptop replacing `du .= p[1]` by `fill!(du,0.0)` or `du .= 0.0` gives a noticeable speedup from ~8ns to ~5ns. The latter two seem the same speed.

If your problem is really only two dimensional though you might do better using out of place and [static arrays](https://github.com/JuliaArrays/StaticArrays.jl). That gets the call to the analogous `f(u,p,t) = @SVector [0.0,0.0]` down to just over 1ns on my laptop.

edit: And I would guess that if you have a large number of components in your real problem the relative time spent in `f!` relative to `g!` is likely lower.

---

<div class="post-metadata">

**Author:** ![stochasticguy](https://avatars.discourse-cdn.com/v4/letter/s/278dde/32.png) [@stochasticguy](https://discourse.julialang.org/u/stochasticguy)\
**Post date:** [May 24, 2022, 3:15pm UTC](https://discourse.julialang.org/t/driftless-stochastic-differential-equation/81525/5 "2022-05-24T15:15:02Z")

</div>

That’s fantastic. Thanks for elaborating, @isaacsas 🙂

---

<div class="post-metadata">

**Author:** ![isaacsas](https://avatars.discourse-cdn.com/v4/letter/i/f6c823/32.png) [@isaacsas](https://discourse.julialang.org/u/isaacsas)\
**Post date:** [May 24, 2022, 5:46pm UTC](https://discourse.julialang.org/t/driftless-stochastic-differential-equation/81525/6 "2022-05-24T17:46:21Z")

</div>

You’re welcome!
