Class FDMBachelierModel

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

public class FDMBachelierModel extends Object implements FiniteDifferenceEquityModel
Finite difference model for option pricing under the Bachelier (normal) model.

The model assumes an arithmetic Brownian motion for the underlying:

dS(t) = (r(t) - q(t)) S(t) dt + sigma dW(t)

where r(t) is the risk-free rate, q(t) is the dividend yield, and sigma is a constant (normal) volatility.

This class follows the same design principles as the other finite-difference equity model implementations: it provides drift and factor loadings via getDrift(double, double...) and getFactorLoading(double, double...), and delegates boundary values to a boundary implementation created through FDBoundaryFactory.

Author:
Alessandro Gnoatto
  • Constructor Details

    • FDMBachelierModel

      public FDMBachelierModel(double initialValue, DiscountCurve riskFreeCurve, DiscountCurve dividendYieldCurve, double volatility, SpaceTimeDiscretization spaceTimeDiscretization)
      Creates a Bachelier model from discount curves.
      Parameters:
      initialValue - Initial underlying value S(0).
      riskFreeCurve - Risk-free discount curve.
      dividendYieldCurve - Dividend yield discount curve.
      volatility - Normal volatility sigma.
      spaceTimeDiscretization - Space-time discretization.
    • FDMBachelierModel

      public FDMBachelierModel(double initialValue, DiscountCurve riskFreeCurve, double volatility, SpaceTimeDiscretization spaceTimeDiscretization)
      Convenience constructor without dividend yield curve (i.e., q = 0).
      Parameters:
      initialValue - Initial underlying value S(0).
      riskFreeCurve - Risk-free discount curve.
      volatility - Normal volatility sigma.
      spaceTimeDiscretization - Space-time discretization.
    • FDMBachelierModel

      public FDMBachelierModel(double initialValue, double riskFreeRate, double dividendYieldRate, double volatility, SpaceTimeDiscretization spaceTimeDiscretization)
      Creates a Bachelier model from constant rates (flat curves).
      Parameters:
      initialValue - Initial underlying value S(0).
      riskFreeRate - Constant risk-free rate r.
      dividendYieldRate - Constant dividend yield q.
      volatility - Normal volatility sigma.
      spaceTimeDiscretization - Space-time discretization.
    • FDMBachelierModel

      public FDMBachelierModel(double initialValue, double riskFreeRate, double volatility, SpaceTimeDiscretization spaceTimeDiscretization)
      Convenience constructor from a constant risk-free rate (flat curve) and q = 0.
      Parameters:
      initialValue - Initial underlying value S(0).
      riskFreeRate - Constant risk-free rate r.
      volatility - Normal volatility sigma.
      spaceTimeDiscretization - 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 S(0).
      Specified by:
      getInitialValue in interface FiniteDifferenceEquityModel
      Returns:
      Initial underlying value.
    • getVolatility

      public double getVolatility()
      Returns the normal volatility sigma.
      Returns:
      Normal volatility.
    • 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.