import java.util.*;

//***********************************************************************************
/** Class to return iterate of power-law-maximum map function.<br>
*/
//***********************************************************************************

public class PowerFunction extends Map1DFunction {

      PowerFunction() {
            nParameters=2;
            a=new double[nParameters];
            aDefault = new double [nParameters];
            aDefault[0]=1.5;
            aDefault[1]=0.5;
            aMinimum=0.;
            aMaximum=getAMaximum(0.5);
            enforceARange=true;
            enforceBRange=false;
            x0Default=0.2;
            title = "Power Law Map";   
      }

      
      public double evaluateFunction(double x) {            
            return a[0]*(Math.pow(0.5,(1.+a[1]))-
                    Math.pow((Math.abs(x-0.5)),(1.+a[1])));
      }
      
      public double evaluateDerivative(double x) {
            if(x<0.5) return a[0]*(1+a[1])*Math.pow(Math.abs(x-0.5),a[1]);
            else return -a[0]*(1+a[1])*Math.pow(Math.abs(x-0.5),a[1]);  
      }      
      
      public double getAMaximum(double d) {
        return Math.pow(2.,1+d);
      }  
}



