示例#1
0
        private static double findResult(int timeHorizon, CashFlowTool cashflowtool, intensityObject intensititer, String simMethod, String approxMethod)
        {
            var aCircle           = new double[timeHorizon + 1, timeHorizon + 1];
            var ab                = new double[timeHorizon + 1, timeHorizon + 1];
            var interestContainer = new List <double[]>(timeHorizon);

            ab[0, 0] = 0;
            ab[1, 0] = 0;
            double result = 0;

            for (int scenario = 0; scenario < timeHorizon; scenario++)
            {
                intensititer.simulate(simMethod);
                double[] Q = cashflowtool.calculateQ(intensititer);

                double[] forward = cashflowtool.forward00(intensititer, 0, timeHorizon, approxMethod);
                for (int time_i = 1; time_i <= timeHorizon; time_i++)
                {
                    //CALCULATING NECESSARY CONTROLS

                    // DERIVING CONTROLS
                    double eta     = 0;
                    double delta_1 = 0;
                    // double delta_0 = cashflowtool.tekniskReserve_circle(time_i, intensititer) * (intensititer.r[time_i-1] - intensititer.tekniskr(time_i));
                    // Calculating PQ
                    // double Pq = cashflowtool.calculatePq(intensititer, 0, time_i);


                    // Payments
                    double b_0_circ = 1; double b_01_circ = 2; double b_02_circ = 3;
                    double b_0_dagger = 1; double b_01_dagger = 0; double b_02_dagger = 0;
                    aCircle[scenario, time_i] = cashflowtool.muProbability00(intensititer, 0, time_i, "") * b_0_circ + cashflowtool.muProbability01(intensititer, 0, time_i, "") * b_01_circ + cashflowtool.muProbability02(intensititer, 0, time_i, "") * b_02_circ;
                    ab[scenario, time_i]      = Q[time_i] * forward[time_i] * b_0_dagger;
                    interestContainer.Add(intensititer.r); // need to hold the interest curve for later sum
                }
            }
            for (int scenario = 0; scenario < timeHorizon; scenario++)
            {
                double scenarioResult = 0;
                for (int time = 0; time < timeHorizon - 1; time++)
                {
                    scenarioResult += Math.Exp(-MathNet.Numerics.Integration.SimpsonRule.IntegrateThreePoint(y => rFunctionInx(y, interestContainer[scenario], intensititer), 0, time + 0.5)) * ((ab[0, time] + ab[0, time + 1]) / 2);
                }

                result += scenarioResult;
            }

            return(result);
        }