/** * Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.model.finitedifference.applications; import org.testng.annotations.Test; import com.opengamma.analytics.financial.model.finitedifference.ExponentialMeshing; import com.opengamma.analytics.financial.model.finitedifference.HyperbolicMeshing; import com.opengamma.analytics.financial.model.finitedifference.MeshingFunction; import com.opengamma.analytics.financial.model.finitedifference.PDEFullResults1D; import com.opengamma.analytics.financial.model.finitedifference.PDEGrid1D; import com.opengamma.analytics.financial.model.interestrate.curve.ForwardCurve; import com.opengamma.analytics.financial.model.volatility.local.AbsoluteLocalVolatilitySurface; import com.opengamma.analytics.math.function.Function1D; import com.opengamma.analytics.math.surface.ConstantDoublesSurface; import com.opengamma.util.test.TestGroup; /** * Test. */ @Test(groups = TestGroup.UNIT) public class TwoStateMarkovChainWithLocalVolDensityTest { private static final double VOL1 = 0.2; private static final double VOL2 = 0.5; private static final double LAMBDA12 = 0.2; private static final double LAMBDA21 = 2.0; private static final double P0 = 0.95; private static final double BETA = 0.5; //private static final double T = 5.0; private static final double SPOT = 1.0; private static final ForwardCurve FORWARD_CURVE; //private static final YieldCurve YIELD_CURVE; private static final double RATE = 0.0; private static final TwoStateMarkovChainDataBundle DATA = new TwoStateMarkovChainDataBundle(VOL1, VOL2, LAMBDA12, LAMBDA21, P0, BETA, BETA); static { final Function1D<Double, Double> fwd = new Function1D<Double, Double>() { @Override public Double evaluate(final Double t) { return SPOT * Math.exp(t * RATE); } }; FORWARD_CURVE = new ForwardCurve(fwd); //YIELD_CURVE = new YieldCurve(ConstantDoublesCurve.from(RATE)); } @Test(enabled = false) public void test() { final double t = 5.0; final int tNodes = 50; final int xNodes = 100; final MeshingFunction timeMesh = new ExponentialMeshing(0, t, tNodes, 2.0); final MeshingFunction spaceMesh = new HyperbolicMeshing(0, 6.0 * FORWARD_CURVE.getForward(t), FORWARD_CURVE.getSpot(), xNodes, 0.01); final PDEGrid1D grid = new PDEGrid1D(timeMesh, spaceMesh); //TwoStateMarkovChainDensity densityCal = new TwoStateMarkovChainDensity(forward, chainData); final TwoStateMarkovChainWithLocalVolDensity densityCal = new TwoStateMarkovChainWithLocalVolDensity(FORWARD_CURVE, DATA, new AbsoluteLocalVolatilitySurface(ConstantDoublesSurface.from(1.0))); final PDEFullResults1D[] denRes = densityCal.solve(grid); System.out.println("Densities "); PDEUtilityTools.printSurface("state 1 density", denRes[0]); PDEUtilityTools.printSurface("state 2 density", denRes[1]); } }