Package ffx.numerics.switching
Class MultiplicativeSwitch
java.lang.Object
ffx.numerics.switching.MultiplicativeSwitch
- All Implemented Interfaces:
UnivariateDiffFunction
,UnivariateSwitchingFunction
The 6 coefficients of the multiplicative polynomial switch are unique given the distances "a" and
"b". They are found by solving a system of 6 equations, which define the boundary conditions of
the switch.
f(a) = 1
f'(a) = f"(a) = 0
f(b) = f'(b) = f"(b) = 0
f(a) = 1
f'(a) = f"(a) = 0
f(b) = f'(b) = f"(b) = 0
- Author:
- Michael J. Schnieders
-
Constructor Summary
ConstructorDescriptionConstructs a MultiplicativeSwitch that starts at f(0)=1 and ends at f(1)=0.MultiplicativeSwitch
(double a, double b) Constructs a MultiplicativeSwitch that starts at f(a)=1 and ends at f(b)=0. -
Method Summary
Modifier and TypeMethodDescriptionboolean
Remains 0 below the lower bound, and 1 above the upper bound (i.e. a multiplicative switch).double
dtaper
(double r) First derivative of the switching function at r.double
dtaper
(double r, double r2, double r3, double r4) First derivative of the switching function at r.double
firstDerivative
(double x) First derivative at a point.int
The highest-order derivative that is zero at the bounds.double
Gets the one bound, where f(x) becomes one.double
Get the value where the switch starts.double
Get the value where the switch starts.double
Gets the zero bound, where f(x) becomes zero.double
nthDerivative
(double x, int order) N'th order derivative at a point.double
secondDerivative
(double x) Second derivative at a point.boolean
True if f(lb + delta) + f(ub - delta) = 1 for all delta between 0 and (ub - lb).double
taper
(double r) Value of the switching function at r.double
taper
(double r, double r2, double r3, double r4, double r5) Value of the switching function at r.toString()
boolean
Remains in the range 0-1 outside the bounds.double
valueAt
(double x) Value at a pointMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface ffx.numerics.switching.UnivariateSwitchingFunction
highestOrderZeroDerivativeAtZeroBound
-
Constructor Details
-
MultiplicativeSwitch
public MultiplicativeSwitch()Constructs a MultiplicativeSwitch that starts at f(0)=1 and ends at f(1)=0. The switch smoothly interpolates from 1 to 0 across that range, with zero first and second derivatives at off and cut. -
MultiplicativeSwitch
public MultiplicativeSwitch(double a, double b) Constructs a MultiplicativeSwitch that starts at f(a)=1 and ends at f(b)=0. The switch smoothly interpolates from 1 to 0 across that range, with zero first and second derivatives at off and cut.- Parameters:
a
- f(a)=1b
- f(b)=0
-
-
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 interfaceUnivariateSwitchingFunction
- Returns:
- df(x)/dx is zero outside range lb-ub.
-
dtaper
public double dtaper(double r, double r2, double r3, double r4) First derivative of the switching function at r.- Parameters:
r
- rr2
- r^2r3
- r^3r4
- r^4- Returns:
- First derivative of switch at r
-
dtaper
public double dtaper(double r) First derivative of the switching function at r.- Parameters:
r
- r- Returns:
- First derivative of switch at r
-
firstDerivative
public double firstDerivative(double x) First derivative at a point.- Specified by:
firstDerivative
in interfaceUnivariateDiffFunction
- 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 interfaceUnivariateSwitchingFunction
- Returns:
- Maximum order zero derivative at bounds.
-
getOneBound
public double getOneBound()Gets the one bound, where f(x) becomes one.- Specified by:
getOneBound
in interfaceUnivariateSwitchingFunction
- Returns:
- One bound
-
getSwitchEnd
public double getSwitchEnd()Get the value where the switch starts.- Returns:
- Switch start.
-
getSwitchStart
public double getSwitchStart()Get the value where the switch starts.- Returns:
- Switch start.
-
getZeroBound
public double getZeroBound()Gets the zero bound, where f(x) becomes zero.- Specified by:
getZeroBound
in interfaceUnivariateSwitchingFunction
- Returns:
- Zero bound
-
nthDerivative
N'th order derivative at a point. Should be relatively optional for any order above 2.- Specified by:
nthDerivative
in 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.- Specified by:
secondDerivative
in 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:
symmetricToUnity
in interfaceUnivariateSwitchingFunction
- Returns:
- If symmetry produces unity result.
-
taper
public double taper(double r, double r2, double r3, double r4, double r5) Value of the switching function at r.- Parameters:
r
- rr2
- r^2r3
- r^3r4
- r^4r5
- r^5- Returns:
- Value of switch at r
-
taper
public double taper(double r) Value of the switching function at r.- Parameters:
r
- r- Returns:
- Value of switch at r
-
toString
-
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 interfaceUnivariateSwitchingFunction
- Returns:
- min(f ( x)) = 0 and max(f(x)) = 1.
-
valueAt
Value at a point- Specified by:
valueAt
in interfaceUnivariateDiffFunction
- Parameters:
x
- a double.- Returns:
- f(x)
- Throws:
IllegalArgumentException
- If f(x) is undefined at x.
-