svStochasticIntegratorRS

struct RSCoefficients
#include <svStochasticIntegratorRS.h>

Coefficients for the Roessler-Stratonovich weak-order-2 methods RS1 / RS2. Names follow the RS1 / RS2 tableau.

Public Members

double a021

drift-stage A-matrix coefficient

double a031

drift-stage A-matrix coefficient

double a032

drift-stage A-matrix coefficient

double a131

drift-stage A-matrix coefficient

double a141

drift-stage A-matrix coefficient

double b031

first diffusion-stage B-matrix coefficient

double b032

first diffusion-stage B-matrix coefficient

double b121

first diffusion-stage B-matrix coefficient

double b131

first diffusion-stage B-matrix coefficient

double b132

first diffusion-stage B-matrix coefficient

double b141

first diffusion-stage B-matrix coefficient

double b142

first diffusion-stage B-matrix coefficient

double b143

first diffusion-stage B-matrix coefficient

double b221

second diffusion-stage B-matrix coefficient

double b231

second diffusion-stage B-matrix coefficient

double b331

second diffusion-stage B-matrix coefficient

double b332

second diffusion-stage B-matrix coefficient

double b341

second diffusion-stage B-matrix coefficient

double b342

second diffusion-stage B-matrix coefficient

double alpha1

drift weight vector

double alpha2

drift weight vector

double alpha3

drift weight vector

double alpha4

drift weight vector

double c02

stage time node

double c03

stage time node

double c13

stage time node

double c14

stage time node

double beta11

diffusion weight vector

double beta12

diffusion weight vector

double beta13

diffusion weight vector

double beta14

diffusion weight vector

double beta22

diffusion weight vector

double beta23

diffusion weight vector

class svStochasticIntegratorRS : public StochasticRKIntegratorBase
#include <svStochasticIntegratorRS.h>

The svStochasticIntegratorRS class implements the Roessler weak second-order Stratonovich methods RS1 and RS2 for SDEs in the Stratonovich interpretation.

Implementation of the RS1 / RS2 methods of Roessler (2007). It is the weak-order-2 counterpart, for the Stratonovich interpretation, of the Ito weak methods (DRI1, W2Ito1) - giving weak-order capability parity with the Stratonovich strong method (Euler-Heun). Like DRI1 it handles non-commutative noise, using the mixed iterated integral of Roessler eq. (5.2), \(\hat I_{(k,l)} = \hat I_{(k)}\tilde I_{(l)}\) for \(l<k\) and \(-\hat I_{(l)}\tilde I_{(k)}\) for \(k<l\), with three-point \(\hat I\) and two-point \(\tilde I\) (only \(2m-1\) independent random variables per step).

The step is fully explicit and derivative-free (four drift/diffusion stages plus cross-noise stages). See the .cpp for the exact recurrence.

Note

This integrator implements the method exactly as published in Roessler (2007) and is verified for any number m of noise sources - including multiple, commutative and non-commutative, noise - against a paper-faithful reference that reproduces Roessler’s own published weak-error tables (see paperReference/generate_rs_reference.py and test_stochasticIntegratorsPaper.py). It uses vector-valued diffusions b^l and is faithful to the published method; it deliberately does NOT reproduce some in-place reference implementations whose multi-noise cross-terms build their stage states by aliasing (not copying) the working state, and so deviate from the published method for m > 1; only the single-noise case, where the cross-terms vanish, agrees with those.

Warning

Stochastic integration is in beta.

Subclassed by svStochasticIntegratorRS1, svStochasticIntegratorRS2

Public Functions

svStochasticIntegratorRS(DynamicObject *dynIn, const RSCoefficients &coefficients)

Constructor taking the dynamic object and the RS coefficient tableau.

virtual void integrate(double currentTime, double timeStep) override

Performs the integration of the associated dynamic objects up to time currentTime+timeStep

Protected Attributes

const RSCoefficients coefficients

RS coefficients.

class svStochasticIntegratorRS1 : public svStochasticIntegratorRS
#include <svStochasticIntegratorRS.h>

RS1: Roessler-Stratonovich weak-order-2 method (deterministic order 2).

Public Functions

svStochasticIntegratorRS1(DynamicObject *dyn)

Constructor.

Private Static Functions

static RSCoefficients getCoefficients()

Returns the RS1 coefficient tableau.

class svStochasticIntegratorRS2 : public svStochasticIntegratorRS
#include <svStochasticIntegratorRS.h>

RS2: Roessler-Stratonovich weak-order-2 method (deterministic order 3).

Public Functions

svStochasticIntegratorRS2(DynamicObject *dyn)

Constructor.

Private Static Functions

static RSCoefficients getCoefficients()

Returns the RS2 coefficient tableau.