SDE Solvers
Recommended Methods
For most diagonal and scalar noise problems where a good amount of accuracy is required and stiffness may be an issue, the SRIW1Optimized
algorithm should do well. If the problem has additive noise, then SRA1Optimized
will be the optimal algorithm. For non-commutative noise, EM
and EulerHeun
will be the most accurate (for Ito and Stratonovich interpretations respectively).
Special Keyword Arguments
save_noise
: Determines whether the values ofW
are saved whenever the timeseries is saved. Defaults to true.delta
: Thedelta
adaptivity parameter for the natural error estimator. For more details, see the publication.
Full List of Methods
StochasticDiffEq.jl
Each of the StochasticDiffEq.jl solvers come with a linear interpolation.
EM
- The Euler-Maruyama method. Strong Order 0.5 in the Ito sense.†EulerHeun
- The Euler-Heun method. Strong Order 0.5 in the Stratonovich sense.RKMil
- An explicit Runge-Kutta discretization of the strong Order 1.0 (Ito) Milstein method.†SRA
- The strong Order 2.0 methods for additive Ito and Stratonovich SDEs due to Rossler. Default tableau is for SRA1.SRI
- The strong Order 1.5 methods for diagonal/scalar Ito SDEs due to Rossler. Default tableau is for SRIW1.SRIW1
- An optimized version of SRIW1. Strong Order 1.5 for diagonal/scalar Ito SDEs.†SRA1
- An optimized version of SRA1. Strong Order 2.0 for additive Ito and Stratonovich SDEs.†
Example usage:
sol = solve(prob,SRIW1())
For SRA
and SRI
, the following option is allowed:
tableau
: The tableau for an:SRA
or:SRI
algorithm. Defaults to SRIW1 or SRA1.
†: Does not step to the interval endpoint. This can cause issues with discontinuity detection, and discrete variables need to be updated appropriately.
StochasticCompositeAlgorithm
One unique feature of StochasticDiffEq.jl is the StochasticCompositeAlgorithm
, which allows you to, with very minimal overhead, design a multimethod which switches between chosen algorithms as needed. The syntax is StochasticCompositeAlgorithm(algtup,choice_function)
where algtup
is a tuple of StochasticDiffEq.jl algorithms, and choice_function
is a function which declares which method to use in the following step. For example, we can design a multimethod which uses EM()
but switches to RKMil()
whenever dt
is too small:
choice_function(integrator) = (Int(integrator.dt<0.001) + 1)
alg_switch = StochasticCompositeAlgorithm((EM(),RKMil()),choice_function)
The choice_function
takes in an integrator
and thus all of the features available in the Integrator Interface can be used in the choice function.