Package ffx.numerics.switching
Class LinearDerivativeSwitch
java.lang.Object
ffx.numerics.switching.LinearDerivativeSwitch
- All Implemented Interfaces:
UnivariateDiffFunction,UnivariateSwitchingFunction
A LinearDerivativeSwitch interpolates between 0 and 1 vi f(x) = 2*x - x^2.
The derivative is then linear in x: f'(x) = 2 - 2*x
Limiting behavior is given by: f(0) = 0, f(1) = 1, f'(0) = 2, f'(1) = 0.
- Author:
- Michael J. Schnieders
-
Constructor Summary
Constructors -
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
-
LinearDerivativeSwitch
public LinearDerivativeSwitch()Constructor for the LinearDerivativeSwitch.
-
-
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
First derivative at a point.- Specified by:
firstDerivativein interfaceUnivariateDiffFunction- Parameters:
x- a double.- Returns:
- f'(x)
- Throws:
IllegalArgumentException- If f'(x) is undefined at 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
Second derivative at a point.- Specified by:
secondDerivativein interfaceUnivariateDiffFunction- Parameters:
x- a double.- Returns:
- f''(x)
- Throws:
IllegalArgumentException- If f''(x) is undefined at 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.
-