Class FDMAsianSabrADI3D

java.lang.Object
net.finmath.finitedifference.solvers.adi.AbstractADI3D
net.finmath.finitedifference.solvers.adi.FDMAsianSabrADI3D
All Implemented Interfaces:
FDMSolver

public class FDMAsianSabrADI3D extends AbstractADI3D
Specialized three-dimensional ADI solver for arithmetic Asian options under a lifted SABR state (S,\alpha,I).

The lifted formulation augments the SABR state variables spot S and volatility factor \alpha by the running integral

I_t = \int_0^t S_u \, du,

so that an arithmetic-average payoff can be represented as a terminal payoff in the three-dimensional state vector (S_t,\alpha_t,I_t). The dynamics are of the form

dS_t = \mu_S dt + diffusion terms,

d\alpha_t = \mu_{\alpha} dt + diffusion terms,

dI_t = S_t dt.

In time-to-maturity coordinates \tau = T - t, the backward pricing PDE is split as

u_{\tau} = A_0 u + A_1 u + A_2 u + A_3 u,

where

  • A_0 contains discounting and mixed-derivative terms and is treated explicitly,
  • A_1 contains the S-direction drift and diffusion and is treated implicitly,
  • A_2 contains the \alpha-direction drift and diffusion and is treated implicitly,
  • A_3 is the transport term S u_I and is treated by a specialized implicit upwind solve.

There is no diffusion in the integral direction and no mixed derivative involving I. Hence the I-direction is a pure transport direction. In \tau-time, the consistent upwind discretization is forward in I.

Relative to the generic AbstractADI3D implementation, this class specializes the third-direction transport operator and the corresponding implicit line solve while leaving the first and second implicit line solves aligned with the standard three-dimensional SABR discretization.

Author:
Alessandro Gnoatto
  • Constructor Details

    • FDMAsianSabrADI3D

      public FDMAsianSabrADI3D(FiniteDifferenceEquityModel model, FiniteDifferenceEquityProduct product, SpaceTimeDiscretization spaceTimeDiscretization, Exercise exercise)
      Creates the lifted three-dimensional ADI solver for arithmetic Asian pricing under SABR.
      Parameters:
      model - The finite-difference model.
      product - The product to be valued.
      spaceTimeDiscretization - The space-time discretization.
      exercise - The exercise specification.
  • Method Details

    • applyA3Explicit

      protected double[] applyA3Explicit(double[] u, double time)
      Applies the explicit transport operator A3 u = S u_I.

      The derivative in the integral direction is approximated by forward upwinding:

      u_I(S_i,\alpha_j,I_k) \approx (u_{i,j,k+1} - u_{i,j,k}) / (I_{k+1} - I_k).

      Overrides:
      applyA3Explicit in class AbstractADI3D
      Parameters:
      u - Current solution vector.
      time - Current running time.
      Returns:
      Explicit contribution of A3.
    • solveFirstDirectionLines

      protected double[] solveFirstDirectionLines(double[] rhs, double time, double dt)
      Solves the implicit systems in the first spatial direction.
      Specified by:
      solveFirstDirectionLines in class AbstractADI3D
      Parameters:
      rhs - Right-hand side vector.
      time - Current running time.
      dt - Time-step size.
      Returns:
      Updated solution vector.
    • solveSecondDirectionLines

      protected double[] solveSecondDirectionLines(double[] rhs, double time, double dt)
      Solves the implicit systems in the second spatial direction.
      Specified by:
      solveSecondDirectionLines in class AbstractADI3D
      Parameters:
      rhs - Right-hand side vector.
      time - Current running time.
      dt - Time-step size.
      Returns:
      Updated solution vector.
    • solveThirdDirectionLines

      protected double[] solveThirdDirectionLines(double[] rhs, double time, double dt)
      Solves the implicit systems in the integral direction.

      For fixed (S,\alpha), the third-direction transport discretization is

      (1 + \lambda_k) v_k - \lambda_k v_{k+1} = rhs_k,

      where \lambda_k = \theta \Delta \tau S / (I_{k+1} - I_k).

      Specified by:
      solveThirdDirectionLines in class AbstractADI3D
      Parameters:
      rhs - Right-hand side vector.
      time - Current running time.
      dt - Time-step size.
      Returns:
      Updated solution vector.