Class FDMCevModel

java.lang.Object
net.finmath.finitedifference.assetderivativevaluation.models.FDMCevModel
All Implemented Interfaces:
FiniteDifferenceBoundary, FiniteDifferenceEquityModel, FiniteDifferenceModel, Model

public class FDMCevModel extends Object implements FiniteDifferenceEquityModel
Finite difference model for option pricing under the Constant Elasticity of Variance (CEV) model.

Under the risk-neutral measure the CEV dynamics are typically written as

dS_t = (r(t) - q(t)) S_t dt + sigma * S_t^beta dW_t.

In this class, getDrift(double, double...) returns the absolute drift, and getFactorLoading(double, double...) returns the absolute factor loading. Hence, for CEV we return sigma * S^(beta).

Author:
Alessandro Gnoatto
  • Constructor Details

    • FDMCevModel

      public FDMCevModel(double initialValue, DiscountCurve riskFreeCurve, DiscountCurve dividendYieldCurve, double sigma, double beta, SpaceTimeDiscretization spaceTimeDiscretization)
      Creates a CEV model instance using explicit discount curves for r and q.
      Parameters:
      initialValue - Initial spot S(0).
      riskFreeCurve - Risk-free discount curve.
      dividendYieldCurve - Dividend yield discount curve.
      sigma - CEV volatility scale parameter sigma.
      beta - CEV elasticity parameter beta.
      spaceTimeDiscretization - The space-time discretization.
    • FDMCevModel

      public FDMCevModel(double initialValue, DiscountCurve riskFreeCurve, double sigma, double beta, SpaceTimeDiscretization spaceTimeDiscretization)
      Creates a CEV model instance assuming zero dividend yield (q = 0), consistent with the constructor style of FDMBlackScholesModel.
      Parameters:
      initialValue - Initial spot S(0).
      riskFreeCurve - Risk-free discount curve.
      sigma - CEV volatility scale parameter sigma.
      beta - CEV elasticity parameter beta.
      spaceTimeDiscretization - The space-time discretization.
    • FDMCevModel

      public FDMCevModel(double initialValue, double riskFreeRate, double dividendYieldRate, double sigma, double beta, SpaceTimeDiscretization spaceTimeDiscretization)
      Creates a CEV model instance using constant rates r and q.
      Parameters:
      initialValue - Initial spot S(0).
      riskFreeRate - Constant risk-free rate r.
      dividendYieldRate - Constant dividend yield q.
      sigma - CEV volatility scale parameter sigma.
      beta - CEV elasticity parameter beta.
      spaceTimeDiscretization - The space-time discretization.
    • FDMCevModel

      public FDMCevModel(double initialValue, double riskFreeRate, double sigma, double beta, SpaceTimeDiscretization spaceTimeDiscretization)
      Creates a CEV model instance using constant r and assuming zero dividend yield (q = 0).
      Parameters:
      initialValue - Initial spot S(0).
      riskFreeRate - Constant risk-free rate r.
      sigma - CEV volatility scale parameter sigma.
      beta - CEV elasticity parameter beta.
      spaceTimeDiscretization - The space-time discretization.
  • Method Details

    • getRiskFreeCurve

      public DiscountCurve getRiskFreeCurve()
      Description copied from interface: FiniteDifferenceEquityModel
      Returns the risk-free discount curve used for pricing.
      Specified by:
      getRiskFreeCurve in interface FiniteDifferenceEquityModel
      Returns:
      The risk-free discount curve.
    • getDividendYieldCurve

      public DiscountCurve getDividendYieldCurve()
      Description copied from interface: FiniteDifferenceEquityModel
      Returns the dividend-yield discount curve.

      This is the legacy single-asset accessor and remains part of the interface to preserve backward compatibility with the current code base.

      For true multi-asset models with one dividend curve per underlying, prefer FiniteDifferenceEquityModel.getDividendYieldCurves(). Such models may override this method with a convention suitable for backward compatibility.

      Specified by:
      getDividendYieldCurve in interface FiniteDifferenceEquityModel
      Returns:
      The dividend-yield discount curve.
    • getInitialValue

      public double[] getInitialValue()
      Returns the initial spot S(0).
      Specified by:
      getInitialValue in interface FiniteDifferenceEquityModel
      Returns:
      The initial spot.
    • getSigma

      public double getSigma()
      Returns the CEV volatility scale parameter sigma.
      Returns:
      sigma.
    • getBeta

      public double getBeta()
      Returns the CEV elasticity parameter beta.
      Returns:
      beta.
    • getSpaceTimeDiscretization

      public SpaceTimeDiscretization getSpaceTimeDiscretization()
      Description copied from interface: FiniteDifferenceModel
      Returns the space-time discretization used by this finite difference model.

      The discretization defines the grid in both time and space on which the PDE approximation is constructed.

      Specified by:
      getSpaceTimeDiscretization in interface FiniteDifferenceModel
      Returns:
      The SpaceTimeDiscretization used by this model.
    • getDrift

      public double[] getDrift(double time, double... stateVariables)
      Description copied from interface: FiniteDifferenceEquityModel
      Returns the drift vector of the model state variables.

      The returned coefficients must be expressed in the same coordinates as the PDE state variables used by the finite-difference solver.

      If the state vector is X = (X1, ..., Xn), then this method returns the vector mu(t, X) in

      dX_i(t) = mu_i(t, X_t) dt + ....

      Specified by:
      getDrift in interface FiniteDifferenceEquityModel
      Parameters:
      time - The evaluation time.
      stateVariables - The current values of the model state variables.
      Returns:
      The drift vector.
    • getFactorLoading

      public double[][] getFactorLoading(double time, double... stateVariables)
      Description copied from interface: FiniteDifferenceEquityModel
      Returns the factor-loading matrix of the model state variables.

      The returned coefficients must be expressed in the same coordinates as the PDE state variables used by the finite-difference solver.

      If the state vector is X = (X1, ..., Xn), then this method returns the matrix b(t, X) in

      dX_i(t) = mu_i(t, X_t) dt + sum_j b_{i,j}(t, X_t) dW_j(t).

      Specified by:
      getFactorLoading in interface FiniteDifferenceEquityModel
      Parameters:
      time - The evaluation time.
      stateVariables - The current values of the model state variables.
      Returns:
      The factor-loading matrix.
    • getBoundaryConditionsAtLowerBoundary

      public BoundaryCondition[] getBoundaryConditionsAtLowerBoundary(FiniteDifferenceEquityProduct product, double time, double... riskFactors)
      Description copied from interface: FiniteDifferenceBoundary
      Returns the boundary conditions at the lower boundary.

      The returned array is indexed by state-variable dimension.

      Specified by:
      getBoundaryConditionsAtLowerBoundary in interface FiniteDifferenceBoundary
      Parameters:
      product - The product being valued.
      time - The running time.
      riskFactors - The state variables specifying the boundary location.
      Returns:
      The lower-boundary conditions by dimension.
    • getBoundaryConditionsAtUpperBoundary

      public BoundaryCondition[] getBoundaryConditionsAtUpperBoundary(FiniteDifferenceEquityProduct product, double time, double... riskFactors)
      Description copied from interface: FiniteDifferenceBoundary
      Returns the boundary conditions at the upper boundary.

      The returned array is indexed by state-variable dimension.

      Specified by:
      getBoundaryConditionsAtUpperBoundary in interface FiniteDifferenceBoundary
      Parameters:
      product - The product being valued.
      time - The running time.
      riskFactors - The state variables specifying the boundary location.
      Returns:
      The upper-boundary conditions by dimension.
    • getCloneWithModifiedSpaceTimeDiscretization

      public FiniteDifferenceEquityModel getCloneWithModifiedSpaceTimeDiscretization(SpaceTimeDiscretization newSpaceTimeDiscretization)
      Description copied from interface: FiniteDifferenceEquityModel
      Returns a clone of this model with a modified space-time discretization.

      The returned model should represent the same stochastic dynamics and market data as the original one, but on the provided discretization.

      Specified by:
      getCloneWithModifiedSpaceTimeDiscretization in interface FiniteDifferenceEquityModel
      Parameters:
      newSpaceTimeDiscretization - The new space-time discretization.
      Returns:
      A clone of this model with the modified discretization.