Class FXYSum

java.lang.Object
org.esa.snap.core.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.

  • Field Details

    • 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 Details

    • 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 Details

    • 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

      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:
    • 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)