The problem solved is the following second order Hamilton-Jacobi (HJ) equation
where is some non empty compact subset of ℝm (m ≥ 1), b(t,x,a) is a vector of ℝd,
r(t,x,a), ℓ(t,x,a), are real-valued, and σ(t,x,a) is a d × p real matrix (for some p ≥ 1). This
problem is linked to the computation of the value function of stochastic optimal control
problems.
It is also possible to consider a corresponding steady equation of the form (9a), that is, equation (23a) alone with no term
It is also possible to consider obstacle equations as for (15), (16) or (17).
The c++ proposed solver is based on an SL method (FD not programmed for this case). 2
Scheme definition: we consider the following SL scheme, implemented on the points x of the grid .
The initialization is done by
For n = 0,…NT -1 (time iterations) (or untill some stopping criteria is satisfied in the case of steady
equations), for all grid points x ∈, we consider
where the "characteristics" yx(h) can be defined, at iteration t = tn, for some h ≥0, for instance by:
Also, [vn](y) denotes some interpolation of vn at point y (typically Q1). When using the definition (25), the scheme is of expected order
where ϵ is of the order of the interpolation error ∥vn -[vn]∥∞. For smooth data, this interpolation error is or order Δx2 for Q1 interpolation, where Δx is the spatial mesh size.
An example of data file is given in data/data_SL_order2_2d_diffusion.h.
User inputs:
ORDER=2
PARAMP (denoted p below) This is in general set to p = d in the scheme.
function Sigma: σ(x,k,a,t). A vector of format double[DIM], also denoted σk below. This vector should be programmed so as to correspond to the kth column vector of the matrix
More generally, for consistency of the scheme with the PDE, the following relation should hold:
function Drift: b(x,k,a,t), also denoted bk(t,x,a) below. This is used to define a set of p vectors bk(t,x,a) (k = 1,…,p) of ℝd. For consistency of the scheme with the PDE, the following relation should hold:
For instance the user can set b1(t,x,a) = B(t,x,a) and bk = 0, ∀k ≥ 2. One can also set, with p = d: bk = the k-th component of the b vector, the other components beeing set to zero.
function funcR : r(t,x,a)
function distributed_cost(x,t,x) : distributive cost ℓ(t,x,a).
function discount_factor(x) : λ(x).