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.

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.

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.

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.

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.

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.

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.