# How to include a time dependent parameter while solving a system of SDEs in Julia?

**URL:** <https://discourse.julialang.org/t/how-to-include-a-time-dependent-parameter-while-solving-a-system-of-sdes-in-julia/71043>\
**Category:** New to Julia\
**Tags:** question\
**Created:** [November 6, 2021, 7:42am UTC](https://discourse.julialang.org/t/how-to-include-a-time-dependent-parameter-while-solving-a-system-of-sdes-in-julia/71043 "2021-11-06T07:42:01Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![rimi](https://avatars.discourse-cdn.com/v4/letter/r/eb9ed0/32.png) [@rimi](https://discourse.julialang.org/u/rimi)\
**Post date:** [November 6, 2021, 7:42am UTC](https://discourse.julialang.org/t/how-to-include-a-time-dependent-parameter-while-solving-a-system-of-sdes-in-julia/71043/1 "2021-11-06T07:42:01Z")

</div>

Hello,

I am new to Julia, started using it in R to solve SDEs. I am trying to solve this system of SDEs, dX = (-X\*a + (Y-X) _b + h)dt + g dW and dY = (-Y_ a + (X-Y)\*b)dt for time [0,200], a=0.30, b=0.2, g=1 and h is 1 for time [50,70] and 0 otherwise. I have the following code for the system for constant h=1:  
(The code is from R)

```julia
library(diffeqr) ##for solving ODEs SDEs DDEs..
library(deSolve)
library(Julia) ##used for the sde 
library(JuliaCall) 
library(data.table)
library(minpack.lm)

tryCatch(system2(file.path(JULIA_HOME, "julia"),
                 "-E \"try println(JULIA_HOME) catch e println(Sys.BINDIR) end;\"", stdout = TRUE)[1],
         warning = function(war) {},
         error = function(err) NULL)

julia_setup(JULIA_HOME ="/home/tim/.local/share/R/JuliaCall/julia/v1.5.0/bin")

##calling Julia
JuliaCall:::julia_locate(JULIA_HOME = "/home/tim/.local/share/R/JuliaCall/julia/v1.5.0/bin")

## setup of the packages
de <- diffeqr::diffeq_setup() 
julia <- julia_setup()

#u0 is the starting value for the vector
#func1 is the ODE TO SOLVE
#f is the drift part in the sde
#g is the diffusion part in the sde
#p are the parameters associated to the sde
# noise_rate_prototype is a sparse matrix by making a dense matrix and setting some values as not zero

#starting value for the three variables
u0<-c(0,0)

## parameters
a=0.33;
b=0.2;
g=1;
h=1;

## parameters of the sde 
p<-c(a, b, g, h)

## drift part in the SDE
f <- JuliaCall::julia_eval("
function f(dy,y,p,t)
  dy[1] = -y[1]*p[1] + (y[2]-y[1])*p[2] + p[4]
  dy[2] = -y[2]*p[1] + (y[1]-y[2])*p[2]
end")

## diffusion part in the SDE
g <- JuliaCall::julia_eval("
function g(dy,y,p,t)
  dy[1,1] = p[3]
  dy[2,1] = 0
end")

## matrix associated to the noise
noise_rate_prototype <- matrix(rep(1,2), nrow = 2, ncol = 1)

tspan <- c(0.,200)

JuliaCall::julia_assign("u0", u0); ## initial value
JuliaCall::julia_assign("tspan", tspan); ## grid
JuliaCall::julia_assign("p", p); ## parameters
JuliaCall::julia_assign("noise_rate_prototype", noise_rate_prototype); ## matrix associated to the noise

## call the SDE problem
prob <- JuliaCall::julia_eval("SDEProblem(f, g, u0,tspan,p, noise_rate_prototype=noise_rate_prototype)");

sol <- de$solve(prob)

udf <- as.data.frame(t(sapply(sol$u,identity)))
    
#plot the 2 figures, 
plot(sol$t,udf$V1,type="l",col="purple", ylab="Y1") #L
lines(sol$t,udf$V2,col="red",ylab="Y2") #R

```

I am not sure how to include the time dependence of `h`, I tried to do it by including a forcing variable (in the form of ‘signal’) but I got a lengthy Julia error (stating that `h` is not defined- code below) . So perhaps thats not the way to go. I’d appreciate any help regarding this.

The chunk of the code I changed to include the time dependent parameters is this (the new or changes lines have an arrow to their right):

```julia
## drift part in the SDE
f <- JuliaCall::julia_eval("
function f(dy,y,p,t)
  MU <- signal(t) # <-
  dy[1] = -y[1]*p[1] + (y[2]-y[1])*p[2] + MU # <- 
  dy[2] = -y[2]*p[1] + (y[1]-y[2])*p[2]
end")

signal <- approxfun(x = c(0, 35, 125, 200), # <- 
                    y = c(0, 1, 0, 0), 
                    method = "constant", rule = 2)

## diffusion part in the SDE
g <- JuliaCall::julia_eval("
function g(dy,y,p,t)
  dy[1,1] = p[3]
  dy[2,1] = 0
end")

## matrix associated to the noise
noise_rate_prototype <- matrix(rep(1,2), nrow = 2, ncol = 1)

tspan <- c(0,200)

JuliaCall::julia_assign("u0", u0); ## initial value
JuliaCall::julia_assign("tspan", tspan); ## grid
JuliaCall::julia_assign("p", p); ## parameters
JuliaCall::julia_assign("signal", signal); # <-
JuliaCall::julia_assign("noise_rate_prototype", noise_rate_prototype); ## matrix associated to the noise

## call the SDE problem
prob <- JuliaCall::julia_eval("SDEProblem(f, g, u0,tspan,p, noise_rate_prototype=noise_rate_prototype, signal=signal)"); # <-

```

The rest of the code remained the same. Please help me correct this.

---

<div class="post-metadata">

**Author:** ![rimi](https://avatars.discourse-cdn.com/v4/letter/r/eb9ed0/32.png) [@rimi](https://discourse.julialang.org/u/rimi)\
**Post date:** [November 6, 2021, 12:07pm UTC](https://discourse.julialang.org/t/how-to-include-a-time-dependent-parameter-while-solving-a-system-of-sdes-in-julia/71043/2 "2021-11-06T12:07:35Z")

</div>

turns out I was mixing Julia and R syntax, when I was defining MU ← signal(t) in a Julia code.

---

<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:** [November 7, 2021, 1:06pm UTC](https://discourse.julialang.org/t/how-to-include-a-time-dependent-parameter-while-solving-a-system-of-sdes-in-julia/71043/3 "2021-11-07T13:06:24Z")

</div>

Note that for using DiffEq from R you can use [CRAN - Package diffeqr](https://cran.r-project.org/web/packages/diffeqr/index.html)

---

<div class="post-metadata">

**Author:** ![rimi](https://avatars.discourse-cdn.com/v4/letter/r/eb9ed0/32.png) [@rimi](https://discourse.julialang.org/u/rimi)\
**Post date:** [November 12, 2021, 10:58am UTC](https://discourse.julialang.org/t/how-to-include-a-time-dependent-parameter-while-solving-a-system-of-sdes-in-julia/71043/4 "2021-11-12T10:58:23Z")

</div>

Thank you! I will make use of that.
