Class FDMAsianSabrADI3D
- All Implemented Interfaces:
FDMSolver
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
-
Nested Class Summary
Nested classes/interfaces inherited from class AbstractADI3D
AbstractADI3D.DoubleQuaternaryOperator, AbstractADI3D.DoubleTernaryOperator -
Constructor Summary
ConstructorsConstructorDescriptionFDMAsianSabrADI3D(FiniteDifferenceEquityModel model, FiniteDifferenceEquityProduct product, SpaceTimeDiscretization spaceTimeDiscretization, Exercise exercise) Creates the lifted three-dimensional ADI solver for arithmetic Asian pricing under SABR. -
Method Summary
Modifier and TypeMethodDescriptionprotected double[]applyA3Explicit(double[] u, double time) Applies the explicit transport operatorA3 u = S u_I.protected double[]solveFirstDirectionLines(double[] rhs, double time, double dt) Solves the implicit systems in the first spatial direction.protected double[]solveSecondDirectionLines(double[] rhs, double time, double dt) Solves the implicit systems in the second spatial direction.protected double[]solveThirdDirectionLines(double[] rhs, double time, double dt) Solves the implicit systems in the integral direction.Methods inherited from class AbstractADI3D
add, applyA0Explicit, applyA1Explicit, applyA2Explicit, applyExerciseObstacleIfNeeded, applyFullExplicitOperator, applyInternalConstraints, applyOuterBoundaries, extractBoundaryValue, flatten, getExercise, getLowerBoundaryValueForFirstDirection, getLowerBoundaryValueForSecondDirection, getLowerBoundaryValueForThirdDirection, getModel, getN, getN0, getN1, getN2, getProduct, getSpaceTimeDiscretization, getTheta, getUpperBoundaryValueForFirstDirection, getUpperBoundaryValueForSecondDirection, getUpperBoundaryValueForThirdDirection, getValue, getValue, getValue, getValue, getValues, getValues, getValues, getValues, getX0Grid, getX1Grid, getX2Grid, isInternalConstraintActive, overwriteBoundaryRow, performDouglasHalfStep, performStableDouglasStep, sanitize, scale, subtract
-
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 operatorA3 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:
applyA3Explicitin classAbstractADI3D- 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:
solveFirstDirectionLinesin classAbstractADI3D- 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:
solveSecondDirectionLinesin classAbstractADI3D- 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:
solveThirdDirectionLinesin classAbstractADI3D- Parameters:
rhs- Right-hand side vector.time- Current running time.dt- Time-step size.- Returns:
- Updated solution vector.
-