All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.finmath.montecarlo.IndependentIncrements Maven / Gradle / Ivy

Go to download

finmath lib is a Mathematical Finance Library in Java. It provides algorithms and methodologies related to mathematical finance.

The newest version!
/*
 * (c) Copyright Christian P. Fries, Germany. Contact: [email protected].
 *
 * Created on 05.07.2014
 */
package net.finmath.montecarlo;

import net.finmath.stochastic.RandomVariable;
import net.finmath.time.TimeDiscretization;

/**
 * Interface description of a time-discrete n-dimensional stochastic process
 * \( X = (X_{1},\ldots,X_{n}) \) provided by independent
 * increments \( \Delta X(t_{i}) = X(t_{i+1})-X(t_{i}) \).
 *
 * Here the dimension n is called factors since this process is used to
 * generate multi-dimensional multi-factor processes and there one might
 * use a different number of factors to generate processes of different
 * dimension.
 *
 * @author Christian Fries
 * @version 1.3
 */
public interface IndependentIncrements {

	/**
	 * Return the increment for a given timeIndex.
	 *
	 * The method returns the random variable vector
	 *	 Δ X(ti) := X(ti+1)-X(ti)
	 * for the given time index i.
	 *
	 * @param timeIndex The time index (corresponding to the this class's time discretization)
	 * @return The vector-valued increment (as a vector (array) of random variables).
	 */
	default RandomVariable[] getIncrement(final int timeIndex)
	{
		final RandomVariable[] increment = new RandomVariable[getNumberOfFactors()];
		for(int factorIndex = 0; factorIndexΔ Xj(ti) := Xj(ti+1)-X(ti)
	 * for the given time index i and a given factor (index) j
	 *
	 * @param timeIndex The time index (corresponding to the this class's time discretization)
	 * @param factor The index of the factor (independent scalar increment)
	 * @return The factor (component) of the increments (a random variable)
	 */
	RandomVariable getIncrement(int timeIndex, int factor);


	/**
	 * Returns the time discretization used for this set of time-discrete Brownian increments.
	 *
	 * @return The time discretization used for this set of time-discrete Brownian increments.
	 */
	TimeDiscretization getTimeDiscretization();

	/**
	 * Returns the number of factors.
	 *
	 * @return The number of factors.
	 */
	int getNumberOfFactors();

	/**
	 * Returns the number of paths.
	 *
	 * @return The number of paths.
	 */
	int getNumberOfPaths();

	/**
	 * Returns a random variable which is initialized to a constant,
	 * but has exactly the same number of paths or discretization points as the ones used by this BrownianMotion.
	 *
	 * @param value The constant value to be used for initialized the random variable.
	 * @return A new random variable.
	 */
	RandomVariable getRandomVariableForConstant(double value);

	/**
	 * Return a new object implementing BrownianMotion
	 * having the same specifications as this object but a different seed
	 * for the random number generator.
	 *
	 * This method is useful if you like to make Monte-Carlo samplings by changing
	 * the seed.
	 *
	 * @param seed New value for the seed.
	 * @return New object implementing BrownianMotion.
	 */
	IndependentIncrements getCloneWithModifiedSeed(int seed);


	/**
	 * Return a new object implementing BrownianMotion
	 * having the same specifications as this object but a different
	 * time discretization.
	 *
	 * @param newTimeDiscretization New time discretization
	 * @return New object implementing BrownianMotion.
	 */
	IndependentIncrements getCloneWithModifiedTimeDiscretization(TimeDiscretization newTimeDiscretization);
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy