package umontreal.iro.lecuyer.functions;



/**
 * Represents a function computing 
 * f (x) - δ for a user-defined function
 * f (x) and shift δ.
 * 
 */
public class ShiftedMathFunction implements MathFunction

,
      MathFunctionWithFirstDerivative, MathFunctionWithDerivative,
      MathFunctionWithIntegral {
   MathFunction func;
   double delta;


   /**
    * Constructs a new function shifting the function func by
    *  a shift delta.
    * 
    * @param func the function.
    * 
    *    @param delta the shift.
    * 
    * 
    */
   public ShiftedMathFunction (MathFunction func, double delta) {
      if (func == null)
         throw new NullPointerException ();
      this.func = func;
      this.delta = delta;
   }


   /**
    * Returns the function f (x).
    * 
    * @return the function.
    * 
    */
   public MathFunction getFunction () {
      return func;
   }


   /**
    * Returns the shift δ = delta.
    * 
    * @return the shift.
    * 
    */
   public double getDelta () {
      return delta;
   }


   public double evaluate (double x) {
      return func.evaluate (x) - delta;
   }

   public double derivative (double x) {
      return MathFunctionUtil.derivative (func, x);
   }

   public double derivative (double x, int n) {
      return MathFunctionUtil.derivative (func, x, n);
   }

   public double integral (double a, double b) {
      return MathFunctionUtil.integral (func, a, b) - (b - a)*getDelta();
   }
}

 

Ads help maintain this website.