Package ffx.numerics.switching
Class BellCurveSwitch
java.lang.Object
ffx.numerics.switching.BellCurveSwitch
- All Implemented Interfaces:
UnivariateDiffFunction,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 Summary
ConstructorsConstructorDescriptionConstruct a bell curve (spliced 5-'th order Hermite splines) of width 1.0, midpoint 0.5.BellCurveSwitch(double midpoint) Construct a bell curve (spliced 5-'th order Hermite splines) of width 1.0.BellCurveSwitch(double midpoint, double width) Construct a bell curve (spliced 5-'th order Hermite splines). -
Method Summary
Modifier and TypeMethodDescriptionbooleanRemains 0 below the lower bound, and 1 above the upper bound (i.e. a multiplicative switch).doublefirstDerivative(double x) First derivative at a point.intThe highest-order derivative that is zero at the bounds.doubleGets the one bound, where f(x) becomes one.doubleGets the zero bound, where f(x) becomes zero.doublenthDerivative(double x, int order) N'th order derivative at a point.doublesecondDerivative(double x) Second derivative at a point.booleanTrue if f(lb + delta) + f(ub - delta) = 1 for all delta between 0 and (ub - lb).toString()booleanRemains in the range 0-1 outside the bounds.doublevalueAt(double x) Value at a pointMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface ffx.numerics.switching.UnivariateSwitchingFunction
highestOrderZeroDerivativeAtZeroBound
-
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:
constantOutsideBoundsin interfaceUnivariateSwitchingFunction- Returns:
- df(x)/dx is zero outside range lb-ub.
-
firstDerivative
public double firstDerivative(double x) First derivative at a point.- Specified by:
firstDerivativein interfaceUnivariateDiffFunction- Parameters:
x- a double.- Returns:
- f'(x)
-
getHighestOrderZeroDerivative
public int getHighestOrderZeroDerivative()The highest-order derivative that is zero at the bounds.- Specified by:
getHighestOrderZeroDerivativein interfaceUnivariateSwitchingFunction- Returns:
- Maximum order zero derivative at bounds.
-
getOneBound
public double getOneBound()Gets the one bound, where f(x) becomes one.- Specified by:
getOneBoundin interfaceUnivariateSwitchingFunction- Returns:
- One bound
-
getZeroBound
public double getZeroBound()Gets the zero bound, where f(x) becomes zero.- Specified by:
getZeroBoundin interfaceUnivariateSwitchingFunction- Returns:
- Zero bound
-
nthDerivative
N'th order derivative at a point. Should be relatively optional for any order above 2.- Specified by:
nthDerivativein interfaceUnivariateDiffFunction- 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:
secondDerivativein interfaceUnivariateDiffFunction- 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:
symmetricToUnityin interfaceUnivariateSwitchingFunction- Returns:
- If symmetry produces unity result.
-
toString
-
validOutsideBounds
public boolean validOutsideBounds()Remains in the range 0-1 outside the bounds. Implied to be true if constantOutsideBounds is true.- Specified by:
validOutsideBoundsin interfaceUnivariateSwitchingFunction- Returns:
- min(f ( x)) = 0 and max(f(x)) = 1.
-
valueAt
Value at a point- Specified by:
valueAtin interfaceUnivariateDiffFunction- Parameters:
x- a double.- Returns:
- f(x)
- Throws:
IllegalArgumentException- If f(x) is undefined at x.
-