Class FDMAsianHestonADI3D
java.lang.Object
net.finmath.finitedifference.solvers.adi.AbstractADI3D
net.finmath.finitedifference.solvers.adi.FDMAsianHestonADI3D
- All Implemented Interfaces:
FDMSolver
Specialized 3D ADI solver for arithmetic Asian options under a lifted Heston
state
(S, v, I), where
dS_t = mu_S dt + diffusion terms,
dv_t = mu_v dt + diffusion terms,
dI_t = S_t dt.
In time-to-maturity tau = T - t, the backward pricing PDE is split as
u_tau = A0 u + A1 u + A2 u + A3 u
with
A0: discount term and mixed derivative terms (treated explicitly)
A1: S-direction drift and diffusion (treated implicitly)
A2: v-direction drift and diffusion (treated implicitly)
A3: I-direction transport S * u_I (treated with a specialized implicit upwind
solve)
There is:
- no diffusion in the I direction
- no mixed derivative involving I
The I direction is pure transport. In tau-time, the correct upwind
discretization is forward in I.
- Author:
- Alessandro Gnoatto
-
Nested Class Summary
Nested classes/interfaces inherited from class AbstractADI3D
AbstractADI3D.DoubleQuaternaryOperator, AbstractADI3D.DoubleTernaryOperator -
Constructor Summary
ConstructorsConstructorDescriptionFDMAsianHestonADI3D(FiniteDifferenceEquityModel model, FiniteDifferenceEquityProduct product, SpaceTimeDiscretization spaceTimeDiscretization, Exercise exercise) Performs the operation. -
Method Summary
Modifier and TypeMethodDescriptionprotected double[]applyA3Explicit(double[] u, double time) Explicit application of A3 u = S * u_I using forward upwinding in I: u_I(S_i, v_j, I_k) ~ (u_{i,j,k+1} - u_{i,j,k}) / (I_{k+1} - I_k) for k = 0,...,n2-2.protected double[]solveFirstDirectionLines(double[] rhs, double time, double dt) protected double[]solveSecondDirectionLines(double[] rhs, double time, double dt) protected double[]solveThirdDirectionLines(double[] rhs, double time, double dt) 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
-
FDMAsianHestonADI3D
public FDMAsianHestonADI3D(FiniteDifferenceEquityModel model, FiniteDifferenceEquityProduct product, SpaceTimeDiscretization spaceTimeDiscretization, Exercise exercise) Performs the operation.- Parameters:
model- The value.product- The value.spaceTimeDiscretization- The value.exercise- The value.
-
-
Method Details
-
applyA3Explicit
protected double[] applyA3Explicit(double[] u, double time) Explicit application of A3 u = S * u_I using forward upwinding in I: u_I(S_i, v_j, I_k) ~ (u_{i,j,k+1} - u_{i,j,k}) / (I_{k+1} - I_k) for k = 0,...,n2-2. The top I-row k = n2 - 1 is handled via the upper I boundary.- Overrides:
applyA3Explicitin classAbstractADI3D
-
solveFirstDirectionLines
protected double[] solveFirstDirectionLines(double[] rhs, double time, double dt) - Specified by:
solveFirstDirectionLinesin classAbstractADI3D
-
solveSecondDirectionLines
protected double[] solveSecondDirectionLines(double[] rhs, double time, double dt) - Specified by:
solveSecondDirectionLinesin classAbstractADI3D
-
solveThirdDirectionLines
protected double[] solveThirdDirectionLines(double[] rhs, double time, double dt) - Specified by:
solveThirdDirectionLinesin classAbstractADI3D
-