public double calculatePq(intensityObject intensititer, double start, double s**t) { CashFlowTool cashflowtool = new CashFlowTool(); double P00 = cashflowtool.muProbability00(intensititer, start, s**t, ""); return(P00 * MathNet.Numerics.Integration.SimpsonRule.IntegrateThreePoint(y => intensititer.rFunction(y) * (cashflowtool.tekniskReserve_circle(y, intensititer) / cashflowtool.tekniskReserve_dagger(y, intensititer)), start, s**t)); }
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); }
private double Vbarcircstjern(intensityObject intensiteter, double x) { CashFlowTool tool = new CashFlowTool(); return(tool.muProbability00(intensiteter, 0, x, "") * tool.tekniskReserve_circle(x, intensiteter)); }