Class BellCurveSwitch

java.lang.Object
ffx.numerics.switching.BellCurveSwitch
All Implemented Interfaces:
UnivariateDiffFunction, UnivariateSwitchingFunction

public class BellCurveSwitch extends Object implements UnivariateSwitchingFunction
Implements a bell-shaped switching function by stitching together a pair of MultiplicativeSwitches. f(midpoint - 0.5*width) = 0, f(midpoint) = 1, f(midpoint + 0.5*width) = 0.
Author:
Jacob M. Litman, Rae Corrigan
  • Constructor Details

    • BellCurveSwitch

      public BellCurveSwitch()
      Construct a bell curve (spliced 5-'th order Hermite splines) of width 1.0, midpoint 0.5.
    • BellCurveSwitch

      public BellCurveSwitch(double midpoint)
      Construct a bell curve (spliced 5-'th order Hermite splines) of width 1.0.
      Parameters:
      midpoint - Midpoint of the curve.
    • BellCurveSwitch

      public BellCurveSwitch(double midpoint, double width)
      Construct a bell curve (spliced 5-'th order Hermite splines).
      Parameters:
      midpoint - Midpoint of the curve.
      width - Width of the curve, between the two zero points.
  • Method Details

    • constantOutsideBounds

      public boolean constantOutsideBounds()
      Remains 0 below the lower bound, and 1 above the upper bound (i.e. a multiplicative switch).
      Specified by:
      constantOutsideBounds in interface UnivariateSwitchingFunction
      Returns:
      df(x)/dx is zero outside range lb-ub.
    • firstDerivative

      public double firstDerivative(double x)
      First derivative at a point.
      Specified by:
      firstDerivative in interface UnivariateDiffFunction
      Parameters:
      x - a double.
      Returns:
      f'(x)
    • getHighestOrderZeroDerivative

      public int getHighestOrderZeroDerivative()
      The highest-order derivative that is zero at the bounds.
      Specified by:
      getHighestOrderZeroDerivative in interface UnivariateSwitchingFunction
      Returns:
      Maximum order zero derivative at bounds.
    • getOneBound

      public double getOneBound()
      Gets the one bound, where f(x) becomes one.
      Specified by:
      getOneBound in interface UnivariateSwitchingFunction
      Returns:
      One bound
    • getZeroBound

      public double getZeroBound()
      Gets the zero bound, where f(x) becomes zero.
      Specified by:
      getZeroBound in interface UnivariateSwitchingFunction
      Returns:
      Zero bound
    • nthDerivative

      public double nthDerivative(double x, int order) throws IllegalArgumentException
      N'th order derivative at a point. Should be relatively optional for any order above 2.
      Specified by:
      nthDerivative in interface UnivariateDiffFunction
      Parameters:
      x - a double.
      order - Derivative order (>= 1)
      Returns:
      d^nf(x)/dx^n
      Throws:
      IllegalArgumentException - If derivative undefined at x.
    • secondDerivative

      public double secondDerivative(double x)
      Second derivative at a point.return max(cut, off);
      Specified by:
      secondDerivative in interface UnivariateDiffFunction
      Parameters:
      x - a double.
      Returns:
      f''(x)
    • symmetricToUnity

      public boolean symmetricToUnity()
      True if f(lb + delta) + f(ub - delta) = 1 for all delta between 0 and (ub - lb). For example, a power switch with beta 1 is symmetric to unity, as f(l) + f(1-l) = 1, but beta 2 produces a non-unity result, where f(0.5) + f(0.5) = 0.5.
      Specified by:
      symmetricToUnity in interface UnivariateSwitchingFunction
      Returns:
      If symmetry produces unity result.
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • validOutsideBounds

      public boolean validOutsideBounds()
      Remains in the range 0-1 outside the bounds. Implied to be true if constantOutsideBounds is true.
      Specified by:
      validOutsideBounds in interface UnivariateSwitchingFunction
      Returns:
      min(f ( x)) = 0 and max(f(x)) = 1.
    • valueAt

      public double valueAt(double x) throws IllegalArgumentException
      Value at a point
      Specified by:
      valueAt in interface UnivariateDiffFunction
      Parameters:
      x - a double.
      Returns:
      f(x)
      Throws:
      IllegalArgumentException - If f(x) is undefined at x.