svStochasticIntegratorDRI1
-
struct DRI1Coefficients
- #include <svStochasticIntegratorDRI1.h>
Coefficients for the Debrabant & Roessler DRI1 weak-order-2 method. Names follow the DRI1 tableau.
Public Members
-
double a021
Drift-stage A-matrix coefficient (A0).
-
double a031
Drift-stage A-matrix coefficient (A0).
-
double a032
Drift-stage A-matrix coefficient (A0).
-
double a121
Drift-stage A-matrix coefficient (A1).
-
double a131
Drift-stage A-matrix coefficient (A1).
-
double b021
Diffusion-stage B-matrix coefficient (B0).
-
double b031
Diffusion-stage B-matrix coefficient (B0).
-
double b121
Diffusion-stage B-matrix coefficient (B1).
-
double b131
Diffusion-stage B-matrix coefficient (B1).
-
double b221
Second diffusion-stage B-matrix coefficient (B2).
-
double b222
Second diffusion-stage B-matrix coefficient (B2).
-
double b223
Second diffusion-stage B-matrix coefficient (B2).
-
double b231
Second diffusion-stage B-matrix coefficient (B2).
-
double b232
Second diffusion-stage B-matrix coefficient (B2).
-
double b233
Second diffusion-stage B-matrix coefficient (B2).
-
double alpha1
Drift weight vector entry.
-
double alpha2
Drift weight vector entry.
-
double alpha3
Drift weight vector entry.
-
double c02
Stage time node (drift c0).
-
double c03
Stage time node (drift c0).
-
double c12
Stage time node (diffusion c1).
-
double c13
Stage time node (diffusion c1).
-
double beta11
Diffusion weight vector beta^(1) entry.
-
double beta12
Diffusion weight vector beta^(1) entry.
-
double beta13
Diffusion weight vector beta^(1) entry.
-
double beta22
Diffusion weight vector beta^(2) entry.
-
double beta23
Diffusion weight vector beta^(2) entry.
-
double beta31
Diffusion weight vector beta^(3) entry.
-
double beta32
Diffusion weight vector beta^(3) entry.
-
double beta33
Diffusion weight vector beta^(3) entry.
-
double beta42
Diffusion weight vector beta^(4) entry.
-
double beta43
Diffusion weight vector beta^(4) entry.
-
double a021
-
class svStochasticIntegratorDRI1 : public StochasticRKIntegratorBase
- #include <svStochasticIntegratorDRI1.h>
The svStochasticIntegratorDRI1 class implements the Debrabant-Roessler DRI1 method, an efficient weak second-order (deterministic order 3) Runge-Kutta method for Ito SDEs. It is a good general-purpose weak-order-2 method, handling non-commutative noise via the mixed iterated integral \(\hat I_{(k,l)} = \tfrac12(\Delta\hat W_k \Delta\hat W_l \mp \sqrt h\,\Delta\hat Z)\).
This implements the DRI1 method. The random variables are a three-point increment \(\Delta\hat W\) (from the Gaussian \(\Delta W\)), its diagonal \(\chi_1 = (\Delta\hat W^2 - h)/2\), and a two-point increment \(\Delta\hat Z\) (from the Gaussian \(\Delta Z\), scale \(\sqrt h\)) used only for the cross-noise terms when there is more than one noise source.
The step is fully explicit and derivative-free: three drift stages ( \(H_0^{(0)}=x_n, H_2^{(0)}, H_3^{(0)}\)) and, per noise source, diffusion stages ( \(H_2^{(k)}, H_3^{(k)}\) and, for the coupled case, \(\hat H_2^{(k)}, \hat H_3^{(k)}\)), all evaluated pointwise. See the .cpp for the exact recurrence.
Warning
Stochastic integration is in beta.
Subclassed by svStochasticIntegratorDRI1NM, svStochasticIntegratorRI1, svStochasticIntegratorRI3, svStochasticIntegratorRI5, svStochasticIntegratorRI6
Public Functions
-
svStochasticIntegratorDRI1(DynamicObject *dyn)
Constructor.
-
virtual void integrate(double currentTime, double timeStep) override
Performs the integration of the associated dynamic objects up to time currentTime+timeStep
Public Members
-
bool nonMixing = false
When true, the cross-noise (mixed iterated integral) terms are skipped. This is the “non-mixing” DRI1NM variant, which is exact for diagonal noise and more efficient because it avoids the extra stage-state diffusion evaluations. For diagonal noise it produces the same result as the full DRI1. Defaults to false (full DRI1).
Protected Functions
-
svStochasticIntegratorDRI1(DynamicObject *dyn, const DRI1Coefficients &coefficients)
Constructor used by the sibling Roessler weak-order-2 methods (RI1/RI3/RI5/RI6), which share DRI1’s step and differ only in their coefficient tableau.
Protected Attributes
-
const DRI1Coefficients coefficients
DRI1 coefficients.
Protected Static Functions
-
static DRI1Coefficients getCoefficients()
Returns the DRI1 coefficient tableau.
-
svStochasticIntegratorDRI1(DynamicObject *dyn)
-
class svStochasticIntegratorDRI1NM : public svStochasticIntegratorDRI1
- #include <svStochasticIntegratorDRI1.h>
DRI1NM: the “non-mixing” (diagonal-noise) variant of DRI1.
Implementation of the DRI1NM method. Identical to DRI1 but skips the cross-noise mixed-integral terms, which is exact (and more efficient) for diagonal/scalar-noise problems.
Warning
Stochastic integration is in beta.
Public Functions
-
inline explicit svStochasticIntegratorDRI1NM(DynamicObject *dyn)
Constructor.
-
inline explicit svStochasticIntegratorDRI1NM(DynamicObject *dyn)
-
class svStochasticIntegratorRI1 : public svStochasticIntegratorDRI1
- #include <svStochasticIntegratorDRI1.h>
RI1: Roessler weak-order-2 Ito method (Roessler 2009), any noise.
Weak order 2, deterministic order 3, for Ito SDEs of any noise structure (diagonal, non-diagonal, non-commutative, scalar-additive). Shares DRI1’s step; differs only in its coefficient tableau (the RI1 tableau).
Warning
Stochastic integration is in beta.
Public Functions
-
svStochasticIntegratorRI1(DynamicObject *dyn)
Constructor.
Private Static Functions
-
static DRI1Coefficients getCoefficients()
Returns the RI1 coefficient tableau.
-
svStochasticIntegratorRI1(DynamicObject *dyn)
-
class svStochasticIntegratorRI3 : public svStochasticIntegratorDRI1
- #include <svStochasticIntegratorDRI1.h>
RI3: Roessler weak-order-2 Ito method (Roessler 2009), any noise.
Public Functions
-
svStochasticIntegratorRI3(DynamicObject *dyn)
Constructor.
Private Static Functions
-
static DRI1Coefficients getCoefficients()
Returns the RI3 coefficient tableau.
-
svStochasticIntegratorRI3(DynamicObject *dyn)
-
class svStochasticIntegratorRI5 : public svStochasticIntegratorDRI1
- #include <svStochasticIntegratorDRI1.h>
RI5: Roessler weak-order-2 Ito method (Roessler 2009), any noise.
Public Functions
-
svStochasticIntegratorRI5(DynamicObject *dyn)
Constructor.
Private Static Functions
-
static DRI1Coefficients getCoefficients()
Returns the RI5 coefficient tableau.
-
svStochasticIntegratorRI5(DynamicObject *dyn)
-
class svStochasticIntegratorRI6 : public svStochasticIntegratorDRI1
- #include <svStochasticIntegratorDRI1.h>
RI6: Roessler weak-order-2 Ito method (Roessler 2009), any noise.
Public Functions
-
svStochasticIntegratorRI6(DynamicObject *dyn)
Constructor.
Private Static Functions
-
static DRI1Coefficients getCoefficients()
Returns the RI6 coefficient tableau.
-
svStochasticIntegratorRI6(DynamicObject *dyn)