AlgART Home

net.algart.math.functions
Class LinearFunc

java.lang.Object
  extended by net.algart.math.functions.LinearFunc
All Implemented Interfaces:
Func
Direct Known Subclasses:
LinearFunc.Updatable

public abstract class LinearFunc
extends java.lang.Object
implements Func

Linear function: f(x0, x1, ..., xn-1) = b + a0x0 + a1x1 +...+ an-1xn-1. Note: if b==+0.0 or b==−0.0, this sum is calculated as +0.0 + a0x0 + a1x1 +...+ an-1xn-1; according Java specification, it means that this function never returns −0.0 double value.

The get(double...) method of the instance of this class requires at least n arguments and throws IndexOutOfBoundsException if the number of arguments is less.

All calculations are performed in strictfp mode, so the result is absolutely identical on all platforms.

Please note: if all ai coefficients are equal (averaging function), this class does not spend Java memory for storing them. So you can freely create averaging linear function with very large number of coefficients; but in this case you should avoid calling a() method.

This class is immutable and thread-safe: there are no ways to modify settings of the created instance.

AlgART Laboratory 2007-2013

Since:
JDK 1.5
Version:
1.2
Author:
Daniel Alievsky

Nested Class Summary
Modifier and Type Class and Description
static class LinearFunc.Updatable
          Updatable extension of the linear function with one argument.
 
Field Summary
Modifier and Type Field and Description
 
Fields inherited from interface net.algart.math.functions.Func
ABS, ABS_DIFF, HALF_X_MINUS_Y, HALF_X_PLUS_Y, HALF_Y_MINUS_X, IDENTITY, MAX, MIN, POSITIVE_DIFF, REVERSE, SELECT, SELECT_FROM_8_DIRECTIONS_2D, SELECT_IF_GREATER, SELECT_IF_GREATER_OR_EQUAL, SHIFTS_ALONG_8_DIRECTIONS_2D, UPDATABLE_IDENTITY, X_MINUS_Y, X_PLUS_Y, Y_MINUS_X
 
Method Summary
Modifier and Type Method and Description
 double[] a()
          Returns an array containing all ai coefficients of this linear function.
 double a(int i)
          Returns ai coefficient of this linear function.
 double b()
          Returns b coefficient of this linear function.
abstract  double get()
          Equivalent to get(new double[0]).
abstract  double get(double... x)
          Returns the result of this function for the given arguments: f(x0, x1, ..., xx.length-1).
abstract  double get(double x0)
          Equivalent to get(new double[] {x0}).
abstract  double get(double x0, double x1)
          Equivalent to get(new double[] {x0, x1}).
abstract  double get(double x0, double x1, double x2)
          Equivalent to get(new double[] {x0, x1, x2}).
abstract  double get(double x0, double x1, double x2, double x3)
          Equivalent to get(new double[] {x0, x1, x2, x3}).
static LinearFunc getAveragingInstance(int n)
          Equivalent to getNonweightedInstance(0.0, 1.0/n, n): the average from n numbers.
static LinearFunc getInstance(double b, double... a)
          Returns an instance of this class, describing the linear function with specified coefficients: b + a0x0 + a1x1 +...+ an-1xn-1.
static LinearFunc getInstance(Range destRange, Range srcRange)
          Returns an instance of this class describing the following linear function with one argument: dmin + (dmax-dmin) * (x-smin) / (smax-smin), where smin..smax is srcRange and dmin..dmax is destRange.
static LinearFunc getNonweightedInstance(double b, double a, int n)
          Returns an instance of this class, describing the linear function with the specified b and the specified number (n) of equal coefficients ai: b + a(x0 + x1 +...+ xn-1).
static LinearFunc.Updatable getUpdatableInstance(double b, double a)
          Returns an instance of the updatable version of this class, describing the linear function with specified coefficients: b + ax0.
 boolean isNonweighted()
          Returns true if n()<=1 or if all ai coefficients are equal.
 int n()
          Returns the number of ai coefficients.
 java.lang.String toString()
          Returns a brief string description of this object.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Method Detail

getInstance

public static LinearFunc getInstance(double b,
                                     double... a)
Returns an instance of this class, describing the linear function with specified coefficients: b + a0x0 + a1x1 +...+ an-1xn-1.

The passed reference a is not maintained by the created instance: if necessary, the Java array is cloned.

Parameters:
b - the b coefficient.
a - the a coefficients.
Returns:
the linear function with the given coefficients.

getNonweightedInstance

public static LinearFunc getNonweightedInstance(double b,
                                                double a,
                                                int n)
Returns an instance of this class, describing the linear function with the specified b and the specified number (n) of equal coefficients ai: b + a(x0 + x1 +...+ xn-1).

Parameters:
b - the b coefficient.
a - the common value of all ai coefficients.
n - the number of ai coefficients.
Returns:
the linear function with the given coefficients.

getAveragingInstance

public static LinearFunc getAveragingInstance(int n)
Equivalent to getNonweightedInstance(0.0, 1.0/n, n): the average from n numbers.

Parameters:
n - the number of ai coefficients.
Returns:
the function calculating average from n numbers.

getInstance

public static LinearFunc getInstance(Range destRange,
                                     Range srcRange)
Returns an instance of this class describing the following linear function with one argument: dmin + (dmax-dmin) * (x-smin) / (smax-smin), where smin..smax is srcRange and dmin..dmax is destRange. This function maps the source range srcRange to the destination range destRange, excepting the only case when srcRange.size()==0. In that special case the behavior of the returned function is not specified (but no exceptions are thrown).

Parameters:
destRange - the destination range.
srcRange - the source range.
Returns:
the linear function mapping the source range to the destination range.
Throws:
java.lang.NullPointerException - if one of the arguments is null.

getUpdatableInstance

public static LinearFunc.Updatable getUpdatableInstance(double b,
                                                        double a)
Returns an instance of the updatable version of this class, describing the linear function with specified coefficients: b + ax0.

The set method of this instance sets x[0]=(newResult-b)*aInv, where aInv=1.0/a is calculated while the instance creation.

Parameters:
b - the b coefficient.
a - the a coefficient.
Returns:
the updatable linear function with the given coefficients.

get

public abstract double get(double... x)
Description copied from interface: Func
Returns the result of this function for the given arguments: f(x0, x1, ..., xx.length-1).

This method must not change the values of x elements!

Specified by:
get in interface Func
Parameters:
x - the function arguments.
Returns:
the function result.

get

public abstract double get()
Description copied from interface: Func
Equivalent to get(new double[0]). Provides better performance because it does not require Java array creation.

Specified by:
get in interface Func
Returns:
the function result.

get

public abstract double get(double x0)
Description copied from interface: Func
Equivalent to get(new double[] {x0}). Provides better performance because it does not require Java array creation.

Specified by:
get in interface Func
Parameters:
x0 - the function argument.
Returns:
the function result.

get

public abstract double get(double x0,
                           double x1)
Description copied from interface: Func
Equivalent to get(new double[] {x0, x1}). Provides better performance because it does not require Java array creation.

Specified by:
get in interface Func
Parameters:
x0 - the first function argument.
x1 - the second function argument.
Returns:
the function result.

get

public abstract double get(double x0,
                           double x1,
                           double x2)
Description copied from interface: Func
Equivalent to get(new double[] {x0, x1, x2}). Provides better performance because it does not require Java array creation.

Specified by:
get in interface Func
Parameters:
x0 - the first function argument.
x1 - the second function argument.
x2 - the third function argument.
Returns:
the function result.

get

public abstract double get(double x0,
                           double x1,
                           double x2,
                           double x3)
Description copied from interface: Func
Equivalent to get(new double[] {x0, x1, x2, x3}). Provides better performance because it does not require Java array creation.

Specified by:
get in interface Func
Parameters:
x0 - the first function argument.
x1 - the second function argument.
x2 - the third function argument.
x3 - the fourth function argument.
Returns:
the function result.

n

public int n()
Returns the number of ai coefficients.

Returns:
the number of argument of this function.

b

public double b()
Returns b coefficient of this linear function.

Returns:
b coefficient.

a

public double a(int i)
Returns ai coefficient of this linear function.

Parameters:
i - the index of the coefficient.
Returns:
ai coefficient.
Throws:
java.lang.IndexOutOfBoundsException - if the given index is negative or >=n()

a

public double[] a()
Returns an array containing all ai coefficients of this linear function.

If isNonweighted() method returns true, it can be more efficient, to save memory, not to use this method, but to get the common value of all coefficients via a(0) call (please not forget to check that n()>0).

The returned array is never a reference to an internal array stored in this object: if necessary, the internal Java array is cloned.

Returns:
all ai coefficients.

isNonweighted

public boolean isNonweighted()
Returns true if n()<=1 or if all ai coefficients are equal. This function works little faster in this case, because it can be simplified as b + a0(x0 + x1 +...+ xn-1).

Returns:
true if n()<=1 or if all ai coefficients are equal.

toString

public java.lang.String toString()
Returns a brief string description of this object.

Overrides:
toString in class java.lang.Object
Returns:
a brief string description of this object.