private FdmBase <double> GetFdm(ISde <double> sde) { Console.WriteLine("Create FDM"); Console.WriteLine("1. Euler, 2. Extrapolated Euler, 3. Milstein, 4. Predictor-Corrector (PC),"); Console.WriteLine("5. PC adjusted, 6. PC midpoint, 7. Exact, 8. Discrete Milstein,"); Console.WriteLine("9. Karhunen Loeve, 10. Platen 1.0 strong scheme, 11. Heun"); int c = Convert.ToInt32(Console.ReadLine()); FdmBase <double> fdm; int NT = 500; Console.Write("How many NT? "); NT = Convert.ToInt32(Console.ReadLine()); double a, b; switch (c) { case 1: fdm = new EulerFdm <double>(sde, NT); break; case 2: fdm = new ExtrapolatedEulerFdm <double>(sde, NT); break; case 3: fdm = new MilsteinFdm <double>(sde, NT); break; case 4: a = 0.5; b = 0.5; fdm = new PredictorCorrectorFdm <double>(sde, NT, a, b); break; case 5: a = 0.5; b = 0.5; fdm = new ModifiedPredictorCorrectorFdm <double>(sde, NT, a, b); break; case 6: a = 0.5; b = 0.5; fdm = new MidpointPredictorCorrectorFdm <double>(sde, NT, a, b); break; case 7: fdm = new ExactFdm <double>(sde, NT); break; case 8: fdm = new DiscreteMilsteinFdm <double>(sde, NT); break; case 9: int N = 100; // Series truncation value IRng <double> rng = new PolarMarsaglia <double>(); fdm = new KarhunenLoeve(sde, NT, N, rng); break; case 10: fdm = new Platen_01_Explicit(sde, NT); break; case 11: fdm = new Heun(sde, NT); break; default: fdm = new ExtrapolatedEulerFdm <double>(sde, NT); break; } return(fdm); }