public double muProbability02(intensityObject intensityobject, double start, double s**t, String method) { return(MathNet.Numerics.Integration.SimpsonRule.IntegrateThreePoint(x => muProbability00(intensityobject, start, x, "") * intensityobject.muFunction(x), start, s**t)); }
public double[] forward00(intensityObject intensityobject, int start, int s**t, String method) { double[] p = new double[intensityobject.mu.Length + 1]; for (int i = 0; i < start; i++) { p[i] = 0; } // Exact, returns the E e^int(tau+mu) if (method == "marginal") { p[start] = Math.Exp(-intensityobject.tau[start] - intensityobject.mu[start]); for (int i = start + 1; i <= s**t; i++) { p[i] = zeroCuponPrice(intensityobject.a1, intensityobject.b1, intensityobject.tau, intensityobject.sigma1, start, i) * Math.Exp(-MathNet.Numerics.Integration.SimpsonRule.IntegrateThreePoint(x => intensityobject.muFunction(x), start, i)); } return(p); } else if (method == "simulation") { var paths = new List <double[]>(); for (int n = 0; n < 100; n++) { intensityObject intCopy = intensityobject; intCopy.simulate("cor"); var path = new double[intensityobject.mu.Length + 1]; path[start] = Math.Exp(-intensityobject.tau[start] - intensityobject.mu[start]); for (int i = start + 1; i <= s**t; i++) { path[i] = Math.Exp(-MathNet.Numerics.Integration.SimpsonRule.IntegrateThreePoint(x => intCopy.tauFunction(x) + intCopy.muFunction(x), start, i)); } paths.Add(path); } for (int i = 0; i <= intensityobject.mu.Length; i++) { var total = 0.0; for (int n = 0; n < 100; n++) { total += paths[n][i]; } p[i] = total / 100; } return(p); } else { throw new NotImplementedException("method not implemented yet"); } }
public double tekniskReserve_circle(double time_i, intensityObject intensititer) { double b_0 = 1; double b_01 = 0.02; double b_02 = 0.02; return(MathNet.Numerics.Integration.SimpsonRule.IntegrateThreePoint(y => muProbability00(intensititer, time_i, y, "") * b_0 * (y > 40 ? 1 : 0) + muProbability00(intensititer, time_i, y, "") * b_01 * intensititer.tauFunction(y) + muProbability00(intensititer, time_i, y, "") * b_02 * intensititer.muFunction(y), time_i, intensititer.horizon)); }