public EqualProbabilitiesBinomialTree(StochasticProcess1D process, double end, int steps)
     : base(process, end, steps)
 {
 }
 protected ShortRateDynamics(StochasticProcess1D process)
 {
     process_ = process;
 }
 public LeisenReimer factory(StochasticProcess1D process, double end, int steps, double strike)
 {
     return(new LeisenReimer(process, end, steps, strike));
 }
 public Joshi4 factory(StochasticProcess1D process, double end, int steps, double strike)
 {
     return(new Joshi4(process, end, steps, strike));
 }
 public Trigeorgis factory(StochasticProcess1D process, double end, int steps, double strike)
 {
     return(new Trigeorgis(process, end, steps, strike));
 }
 public Tian factory(StochasticProcess1D process, double end, int steps, double strike)
 {
     return(new Tian(process, end, steps, strike));
 }
 public AdditiveEQPBinomialTree(StochasticProcess1D process, double end, int steps, double strike)
     : base(process, end, steps)
 {
     up_ = -0.5 * driftPerStep_ +
           0.5 * Math.Sqrt(4.0 * process.variance(0.0, x0_, dt_) - 3.0 * driftPerStep_ * driftPerStep_);
 }
 public AdditiveEQPBinomialTree factory(StochasticProcess1D process, double end, int steps, double strike)
 {
     return(new AdditiveEQPBinomialTree(process, end, steps, strike));
 }
 public JarrowRudd factory(StochasticProcess1D process, double end, int steps, double strike)
 {
     return(new JarrowRudd(process, end, steps, strike));
 }
 public CoxRossRubinstein factory(StochasticProcess1D process, double end, int steps, double strike)
 {
     return(new CoxRossRubinstein(process, end, steps, strike));
 }
 public JarrowRudd(StochasticProcess1D process, double end, int steps, double strike)
     : base(process, end, steps)
 {
     // drift removed
     up_ = process.stdDeviation(0.0, x0_, dt_);
 }
        /*! Returns an approximation of the variance defined as
         *  \f$ \sigma(t_0, x_0)^2 \Delta t \f$. */
        public double variance(StochasticProcess1D process, double t0, double x0, double dt)
        {
            double sigma = process.diffusion(t0, x0);

            return(sigma * sigma * dt);
        }
 /*! Returns an approximation of the diffusion defined as
  *  \f$ \sigma(t_0, x_0) \sqrt{\Delta t} \f$. */
 public double diffusion(StochasticProcess1D process, double t0, double x0, double dt)
 {
     return(process.diffusion(t0, x0) * Math.Sqrt(dt));
 }
 /*! Returns an approximation of the drift defined as
  *  \f$ \mu(t_0, x_0) \Delta t \f$. */
 public double drift(StochasticProcess1D process, double t0, double x0, double dt)
 {
     return(process.drift(t0, x0) * dt);
 }
 public TrinomialTree(StochasticProcess1D process,
                      TimeGrid timeGrid)
     : this(process, timeGrid, false)
 {
 }