org.esa.beam.util.math
Class FXYSum

java.lang.Object
  extended by org.esa.beam.util.math.FXYSum
Direct Known Subclasses:
FXYSum.BiCubic, FXYSum.BiLinear, FXYSum.BiQuadric, FXYSum.Cubic, FXYSum.Linear, FXYSum.Quadric

public class FXYSum
extends Object

The class FXYSum represents a sum of function terms sum(c[i] * f[i](x,y), i=0, n-1) where the vector c is a double array of constant coefficients and the vector f is an array of functions of type FXY in x and y.

The vector c of constants is set by the approximate(double[][], int[]) method.

After vector c is set, the actual function values z(x,y) are retrieved using the computeZ(double, double) method.

Version:
$Revision$ $Date$
Author:
Norman Fomferra

Nested Class Summary
static class FXYSum.BiCubic
          Provides an optimized computeZ method for bi-cubic polynomials (order = 3+3).
static class FXYSum.BiLinear
          Provides an optimized computeZ method for bi-linear polynomials (order = 1+1).
static class FXYSum.BiQuadric
          Provides an optimized computeZ method for bi-quadric polynomials (order = 2+2).
static class FXYSum.Cubic
          Provides an optimized computeZ method for cubic polynomials (order = 3).
static class FXYSum.Linear
          Provides an optimized computeZ method for linear polynomials (order = 1).
static class FXYSum.Quadric
          Provides an optimized computeZ method for quadric polynomials (order = 2).
 
Field Summary
static FXY[] FXY_4TH
           
static FXY[] FXY_BI_4TH
           
static FXY[] FXY_BI_CUBIC
           
static FXY[] FXY_BI_LINEAR
           
static FXY[] FXY_BI_QUADRATIC
           
static FXY[] FXY_CUBIC
           
static FXY[] FXY_LINEAR
           
static FXY[] FXY_QUADRATIC
           
 
Constructor Summary
FXYSum(FXY[] functions)
          Constructs a new sum of terms sum(c[i] * f[i](x,y), i=0, n-1) for the given vector of functions.
FXYSum(FXY[] functions, int order)
          Constructs a new sum of terms sum(c[i] * f[i](x,y), i=0, n-1) for the given vector of functions and a polynomial order.
FXYSum(FXY[] functions, int order, double[] coefficients)
          Constructs a new sum of terms sum(c[i] * f[i](x,y), i=0, n-1) for the given vector of functions and a polynomial order.
 
Method Summary
protected  void appendCFunctionCodeBody(String fname, String x, String y, StringBuffer sb)
           
protected  void appendCFunctionCodeEnd(String fname, String x, String y, StringBuffer sb)
           
protected  void appendCFunctionCodePart(StringBuffer sb, String part, String x, String y)
           
protected  void appendCFunctionCodeStart(String fname, String x, String y, StringBuffer sb)
           
 void approximate(double[][] data, int[] indices)
          Approximates the given data points x,y,z by this sum of function terms so that z ~ sum(c[i] * f[i](x,y), i=0, n-1).
 double computeZ(double x, double y)
          Computes this sum of function terms z(x,y) = sum(c[i] * f[i](x,y), i=0, n-1).
static double computeZ(FXY[] f, double[] c, double x, double y)
          Computes z(x,y) = sum(c[i] * f[i](x,y), i = 0, n - 1).
 String createCFunctionCode(String fname, String x, String y)
          Returns this sum of function terms as human-readable C-code.
static FXYSum createCopy(FXYSum fxySum)
          Creates a copy of the given fxySum.
static FXYSum createFXYSum(int order, double[] coefficients)
          Creates a FXYSum by the given order and coefficients.
 double[] getCoefficients()
          Gets the vector c of coefficient elements c[i].
 FXY[] getFunctions()
          Gets the vector f of functions elements f[i](x,y).
 double getMaxError()
          Gets the maximum, absolute error of the approximation.
 int getNumTerms()
          Gets the number n of terms c[i] * f[i](x,y).
 int getOrder()
          Gets the polynomial order, if any.
 double getRootMeanSquareError()
          Gets the root mean square error.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

FXY_LINEAR

public static final FXY[] FXY_LINEAR

FXY_BI_LINEAR

public static final FXY[] FXY_BI_LINEAR

FXY_QUADRATIC

public static final FXY[] FXY_QUADRATIC

FXY_BI_QUADRATIC

public static final FXY[] FXY_BI_QUADRATIC

FXY_CUBIC

public static final FXY[] FXY_CUBIC

FXY_BI_CUBIC

public static final FXY[] FXY_BI_CUBIC

FXY_4TH

public static final FXY[] FXY_4TH

FXY_BI_4TH

public static final FXY[] FXY_BI_4TH
Constructor Detail

FXYSum

public FXYSum(FXY[] functions)
Constructs a new sum of terms sum(c[i] * f[i](x,y), i=0, n-1) for the given vector of functions. The vector c is initally set to zero and will remeain zero until the method approximate(double[][], int[]) is performed with given data on this function sum.

Parameters:
functions - the vector F of functions

FXYSum

public FXYSum(FXY[] functions,
              int order)
Constructs a new sum of terms sum(c[i] * f[i](x,y), i=0, n-1) for the given vector of functions and a polynomial order. The vector c is initally set to zero and will remeain zero until the method approximate(double[][], int[]) is performed with given data on this function sum.

Parameters:
functions - the vector F of functions
order - the polynomial order (for descriptive purpose only), -1 if unknown

FXYSum

public FXYSum(FXY[] functions,
              int order,
              double[] coefficients)
Constructs a new sum of terms sum(c[i] * f[i](x,y), i=0, n-1) for the given vector of functions and a polynomial order. The vector c is set by the coefficients parameter. The coefficients will be recalculated if the method approximate(double[][], int[]) is called.

Parameters:
functions - the vector F of functions
order - the polynomial order (for descriptive purpose only), -1 if unknown
coefficients - the vector c
Method Detail

createFXYSum

public static FXYSum createFXYSum(int order,
                                  double[] coefficients)
Creates a FXYSum by the given order and coefficients.

Note: This factory method supprots only the creation of instances of the following FXYSum classes:

Parameters:
order - the order of the sum
coefficients - the coefficients
Returns:
returns a FXYSum instance, or null if the resulting instance is one of the supported.

createCopy

public static FXYSum createCopy(FXYSum fxySum)
Creates a copy of the given fxySum.

Parameters:
fxySum - the FXYSum to copy
Returns:
a copy of the given FXYSum

getNumTerms

public final int getNumTerms()
Gets the number n of terms c[i] * f[i](x,y).

Returns:
the number of function terms

getFunctions

public final FXY[] getFunctions()
Gets the vector f of functions elements f[i](x,y).

Returns:
the vector F of functions

getCoefficients

public final double[] getCoefficients()
Gets the vector c of coefficient elements c[i].

Returns:
the vector F of functions

getOrder

public int getOrder()
Gets the polynomial order, if any.

Returns:
the polynomial order or -1 if unknown

getRootMeanSquareError

public double getRootMeanSquareError()
Gets the root mean square error.

Returns:
the root mean square error

getMaxError

public double getMaxError()
Gets the maximum, absolute error of the approximation.

Returns:
the maximum, absolute error

computeZ

public double computeZ(double x,
                       double y)
Computes this sum of function terms z(x,y) = sum(c[i] * f[i](x,y), i=0, n-1). The method will return zero unless the approximate(double[][], int[]) is called in order to set the coefficient vector c.

Parameters:
x - the x value
y - the y value
Returns:
the z value
See Also:
computeZ(FXY[], double[], double, double)

computeZ

public static double computeZ(FXY[] f,
                              double[] c,
                              double x,
                              double y)
Computes z(x,y) = sum(c[i] * f[i](x,y), i = 0, n - 1).

Parameters:
f - the function vector
c - the coeffcient vector
x - the x value
y - the y value
Returns:
the z value

approximate

public void approximate(double[][] data,
                        int[] indices)
Approximates the given data points x,y,z by this sum of function terms so that z ~ sum(c[i] * f[i](x,y), i=0, n-1). The method also sets the error statistics which can then be retrieved by the getRootMeanSquareError() and getMaxError() methods.

Parameters:
data - an array of values of the form {{x1,y1,z1}, {x2,y2,z2}, {x3,y3,z3}, ...}
indices - an array of coordinate indices, determining the indices of x, y and z within a data element. If null then indices defaults to the array {0, 1, 2}.
See Also:
Approximator.approximateFXY(double[][], int[], FXY[], double[]), Approximator.computeErrorStatistics(double[][], int[], FXY[], double[]), computeZ(double, double)

createCFunctionCode

public String createCFunctionCode(String fname,
                                  String x,
                                  String y)
Returns this sum of function terms as human-readable C-code.

Parameters:
fname - the name of the function z(x,y) = sum(C[i]*F[i](x,y), i, n)
x - the name of the x variable
y - the name of the y variable
Returns:
the C-code

appendCFunctionCodeStart

protected void appendCFunctionCodeStart(String fname,
                                        String x,
                                        String y,
                                        StringBuffer sb)

appendCFunctionCodeBody

protected void appendCFunctionCodeBody(String fname,
                                       String x,
                                       String y,
                                       StringBuffer sb)

appendCFunctionCodeEnd

protected void appendCFunctionCodeEnd(String fname,
                                      String x,
                                      String y,
                                      StringBuffer sb)

appendCFunctionCodePart

protected void appendCFunctionCodePart(StringBuffer sb,
                                       String part,
                                       String x,
                                       String y)


Copyright © 2002-2012 Brockmann Consult GmbH. All Rights Reserved.