public VarianceInterpoler(double[] maturityPillars, RrFunction[] pillarVariances) { Contract.Requires(maturityPillars.All(t => t > 0.0)); this.maturityPillars = maturityPillars; this.pillarVariances = pillarVariances; maturityStepSearcher = new StepSearcher(maturityPillars); }
public void TestTryFindPillarIndex() { var pillars = new[] { 0.1, 0.5004, 0.75, 1.0, 9.99999 }; var stepSearcher = new StepSearcher(pillars); foreach (var i in Enumerable.Range(0, pillars.Length)) { int index; Assert.True(stepSearcher.TryFindPillarIndex(pillars[i], out index)); Assert.AreEqual(index, i); Assert.True(stepSearcher.TryFindPillarIndex(1.000000000000000000001 * pillars[i], out index)); Assert.False(stepSearcher.TryFindPillarIndex(0.999999999999 * pillars[i], out index)); } int indexTest; Assert.False(stepSearcher.TryFindPillarIndex(double.NegativeInfinity, out indexTest)); Assert.False(stepSearcher.TryFindPillarIndex(double.PositiveInfinity, out indexTest)); }
private LocalVariance(double[] maturities, RrFunction[] vs, RrFunction[] dVdYs, RrFunction[] d2Vd2Ys, RrFunction[] dVdTs) { Contract.Requires(maturities.All(t => t > 0.0)); this.maturities = maturities; this.vs = vs; this.dVdYs = dVdYs; this.d2Vd2Ys = d2Vd2Ys; this.dVdTs = dVdTs; maturityStepSearcher = new StepSearcher(maturities); pillarStepIntegrals = new RrFunction[maturities.Length - 1]; // sigma^2 // short local variance = ------------------------------------------- // (y * (dsigma^2/dy) / (2 * sigma^2) - 1)^2 var sigma2 = vs[0] / maturities[0]; shortLocalVar = 0.5 * m * sigma2.Derivative() / sigma2 - 1.0; shortLocalVar = sigma2 / (shortLocalVar * shortLocalVar); }
public void TestLocateLeftIndex() { var pillars = new[] { 0.0, 0.5, 0.7, 1.0, 10.0 }; var stepSearcher = new StepSearcher(pillars); foreach (var i in Enumerable.Range(0, pillars.Length)) { Assert.AreEqual(stepSearcher.LocateLeftIndex(pillars[i]), i); if (i < pillars.Length - 1) { double midPoint = 0.5 * (pillars[i] + pillars[i + 1]); Assert.AreEqual(stepSearcher.LocateLeftIndex(midPoint), i); double nextPointMinus = pillars[i + 1] * (1.0 - DoubleUtils.MachineEpsilon); Assert.AreEqual(stepSearcher.LocateLeftIndex(nextPointMinus), i); } } Assert.AreEqual(stepSearcher.LocateLeftIndex(pillars[0] - 0.00000001), -1); Assert.AreEqual(stepSearcher.LocateLeftIndex(pillars[pillars.Length - 1] + 0.00000001), pillars.Length - 1); Assert.AreEqual(stepSearcher.LocateLeftIndex(double.NegativeInfinity), -1); Assert.AreEqual(stepSearcher.LocateLeftIndex(double.PositiveInfinity), pillars.Length - 1); }
protected Interpoler2D(StepSearcher xSearcher, StepSearcher ySearcher) { this.xSearcher = xSearcher; this.ySearcher = ySearcher; }