How can we pass two different driving noise processes for an SDEProblem? The goal is to simulate a simple system of SDE’s:
dX(t) = f(X, Y, t)dt + g(X, Y, t)dZ_1(t) + h(X, Y, t)dZ_2(t)
dY(t) = \alpha(Y,t)dt + \beta(Y,t)dZ_2(t)
To exemplify with a concrete example of a process with stochastic volatility:
dX(t) = bdt +Y(t)dZ_1(t) - \rho dZ_2(t)
dY(t) = \eta (\mu - Y(t))dt + dZ_2(t)
Where Z_2(t) is some subordinator (always positive and increasing).
Let’s assume we are using custom noise processes declared using the interface from
DiffEqNoiseProcess, so no possibility of exploring the multivariate properties of Wiener processes. I am using my own noise processes here, let’s call them
MyProcess1 for Z_1 and
MyProcess2 for Z_2.
Both have completely different properties so I don’t see how to do this without creating a single
NoiseProcess equivalent to Z(t) = [Z_1(t), Z_2(t)], which seems to imply a tremendous amount of juggling to define
bridge functions that act in different ways on each coordinate.
function f(du,u,p,t) du = b du = eta * (mu - u) end function g(du, u, p ,t) du[1,1] = u du[1,2] = -rho du[2,1] = 0 du[2,2] = 1 end
And then we would define our NoiseProcess in the way that I said above (quite troublesome in practice).
Is there any handier way of doing this? Something similar in principle to:
function g1(du, u, p ,t) du = u du = 0 end function g2(du, u, p ,t) du = -rho du = 1 end SDEProblem(f, g1, g2, u0, tspan; noise=(MyProcess1, MyProcess2))