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 dist and bridge functions that act in different ways on each coordinate.
function f(du,u,p,t)
du[1] = b
du[2] = eta * (mu - u[2])
end
function g(du, u, p ,t)
du[1,1] = u[2]
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[1] = u[2]
du[2] = 0
end
function g2(du, u, p ,t)
du[1] = -rho
du[2] = 1
end
SDEProblem(f, g1, g2, u0, tspan; noise=(MyProcess1, MyProcess2))
