google-research / torchsde

Differentiable SDE solvers with GPU support and efficient sensitivity analysis.
Apache License 2.0
1.56k stars 195 forks source link

Defining noise type for vector-valued homogeneous SDE #124

Open lostdevfound opened 1 year ago

lostdevfound commented 1 year ago

Hello, I would like to know what kind of noise_type one should pick for a homogeneous SDE: $$dX(t) = A(t)X(t) + \sum_{j=1}^m B_j(t)X(t) dW_j(t),$$ where $A(t)$ and $B_j(t)$ are square matrices and $dW_j$ is a scalar increment of $m$-dimensional process $W(t)$.

patrick-kidger commented 1 year ago

This is general noise, as any component of X can affect any component of dX.

FWIW If you divide your equation by X(t), so as to obtain d log(X(t)) = A(t) d(t) + sum_j B_j(t) dW_j(t) then this would become additive noise, which then admits higher-order solvers. (And in fact in this case, the right hand side becomes independent of X, so I think you could even write down an analytical solution.)

Side note, torchsde requires that you bundle all diffusion terms together into the g method. If you find yourself wanting to use solvers that make explicit use of decomposing the noise into multiple terms -- e.g. Ninomiya-Victoir -- then consider Diffrax. At least in principle this supports using multiple independent noise terms. (Although in practice none of the built-in solvers take advantage of this, but it'd be easy enough to write a solver that does if that is important to you.)