Example #1
0
        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));
        }
Example #3
0
        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);
        }
Example #5
0
 protected Interpoler2D(StepSearcher xSearcher, StepSearcher ySearcher)
 {
     this.xSearcher = xSearcher;
     this.ySearcher = ySearcher;
 }