Documentation of 'umontreal.iro.lecuyer.functionfit.SmoothingCubicSpline' Java class
SmoothingCubicSpline
umontreal.iro.lecuyer.functionfit

Class SmoothingCubicSpline

  • All Implemented Interfaces:
    MathFunction, MathFunctionWithDerivative, MathFunctionWithFirstDerivative, MathFunctionWithIntegral


    public class SmoothingCubicSpline
    extends java.lang.Object
    implements MathFunction, MathFunctionWithFirstDerivative, MathFunctionWithDerivative, MathFunctionWithIntegral
    Represents a cubic spline with nodes at (xi, yi) computed with the smoothing cubic spline algorithm of Schoenberg. A smoothing cubic spline is made of n + 1 cubic polynomials. The ith polynomial of such a spline, for i = 1,…, n - 1, is defined as Si(x) while the complete spline is defined as

    S(x) = Si(x),         for x∈[xi-1, xi].

    For x < x0 and x > xn-1, the spline is not precisely defined, but this class performs extrapolation by using S0 and Sn linear polynomials. The algorithm which calculates the smoothing spline is a generalization of the algorithm for an interpolating spline. Si is linked to Si+1 at xi+1 and keeps continuity properties for first and second derivatives at this point, therefore Si(xi+1) = Si+1(xi+1), S'i(xi+1) = S'i+1(xi+1) and S''i(xi+1) = S''i+1(xi+1).

    The spline is computed with a smoothing parameter ρ∈[0, 1] which represents its accuracy with respect to the initial (xi, yi) nodes. The smoothing spline minimizes

    L = ρi=0n-1wi(yi-Si(xi))2 + (1 - ρ)∫x0xn-1(S''(x))2dx

    In fact, by setting ρ = 1, we obtain the interpolating spline; and we obtain a linear function by setting ρ = 0. The weights wi > 0, which default to 1, can be used to change the contribution of each point in the error term. A large value wi will give a large weight to the ith point, so the spline will pass closer to it. Here is a small example that uses smoothing splines:


       int n;
       double[] X = new double[n];
       double[] Y = new double[n];
       // here, fill arrays X and Y with n data points (x_i, y_i)
       // The points must be sorted with respect to x_i.

       double rho = 0.1;
       SmoothingCubicSpline fit = new SmoothingCubicSpline(X, Y, rho);

       int m = 40;
       double[] Xp = new double[m+1];       // Xp, Yp are spline points
       double[] Yp = new double[m+1];
       double h = (X[n-1] - X[0]) / m;      // step

       for (int i = 0; i <= m; i++) {
          double z = X[0] + i * h;
          Xp[i] = z;
          Yp[i] = fit.evaluate(z);          // evaluate spline at z
       }

    • Constructor Summary

      Constructors 
      Constructor and Description
      SmoothingCubicSpline(double[] x, double[] y, double rho)
      Constructs a spline with nodes at (xi, yi), with weights = 1 and smoothing factor ρ = rho.
      SmoothingCubicSpline(double[] x, double[] y, double[] w, double rho)
      Constructs a spline with nodes at (xi, yi), with weights wi and smoothing factor ρ = rho.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method and Description
      double derivative(double z)
      Evaluates and returns the value of the first derivative of the spline at z.
      double derivative(double z, int n)
      Evaluates and returns the value of the n-th derivative of the spline at z.
      double evaluate(double z)
      Evaluates and returns the value of the spline at z.
      int getFitPolynomialIndex(double x)
      Returns the index of P, the Polynomial instance used to evaluate x, in an ArrayList table instance returned by getSplinePolynomials().
      double getRho()
      Returns the smoothing factor used to construct the spline.
      Polynomial[] getSplinePolynomials()
      Returns a table containing all fitting polynomials.
      double[] getWeights()
      Returns the weights of the points.
      double[] getX()
      Returns the xi coordinates for this spline.
      double[] getY()
      Returns the yi coordinates for this spline.
      double integral(double a, double b)
      Evaluates and returns the value of the integral of the spline from a to b.
      • Methods inherited from class java.lang.Object

        equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • SmoothingCubicSpline

        public SmoothingCubicSpline(double[] x,
                                    double[] y,
                                    double[] w,
                                    double rho)
        Constructs a spline with nodes at (xi, yi), with weights wi and smoothing factor ρ = rho. The xi must be sorted in increasing order.
        Parameters:
        x - the xi coordinates.
        y - the yi coordinates.
        w - the weight for each point, must be > 0.
        rho - the smoothing parameter
        Throws:
        java.lang.IllegalArgumentException - if x, y and z do not have the same length, if rho has wrong value, or if the spline cannot be calculated.
      • SmoothingCubicSpline

        public SmoothingCubicSpline(double[] x,
                                    double[] y,
                                    double rho)
        Constructs a spline with nodes at (xi, yi), with weights = 1 and smoothing factor ρ = rho. The xi must be sorted in increasing order.
        Parameters:
        x - the xi coordinates.
        y - the yi coordinates.
        rho - the smoothing parameter
        Throws:
        java.lang.IllegalArgumentException - if x and y do not have the same length, if rho has wrong value, or if the spline cannot be calculated.
    • Method Detail

      • evaluate

        public double evaluate(double z)
        Evaluates and returns the value of the spline at z.
        Specified by:
        evaluate in interface MathFunction
        Parameters:
        z - argument of the spline.
        Returns:
        value of spline.
      • integral

        public double integral(double a,
                               double b)
        Evaluates and returns the value of the integral of the spline from a to b.
        Specified by:
        integral in interface MathFunctionWithIntegral
        Parameters:
        a - lower limit of integral.
        b - upper limit of integral.
        Returns:
        value of integral.
      • derivative

        public double derivative(double z)
        Evaluates and returns the value of the first derivative of the spline at z.
        Specified by:
        derivative in interface MathFunctionWithFirstDerivative
        Parameters:
        z - argument of the spline.
        Returns:
        value of first derivative.
      • derivative

        public double derivative(double z,
                                 int n)
        Evaluates and returns the value of the n-th derivative of the spline at z.
        Specified by:
        derivative in interface MathFunctionWithDerivative
        Parameters:
        z - argument of the spline.
        n - order of the derivative.
        Returns:
        value of n-th derivative.
      • getX

        public double[] getX()
        Returns the xi coordinates for this spline.
        Returns:
        the xi coordinates.
      • getY

        public double[] getY()
        Returns the yi coordinates for this spline.
        Returns:
        the yi coordinates.
      • getWeights

        public double[] getWeights()
        Returns the weights of the points.
        Returns:
        the weights of the points.
      • getRho

        public double getRho()
        Returns the smoothing factor used to construct the spline.
        Returns:
        the smoothing factor.
      • getSplinePolynomials

        public Polynomial[] getSplinePolynomials()
        Returns a table containing all fitting polynomials.
        Returns:
        Table containing the fitting polynomials.
      • getFitPolynomialIndex

        public int getFitPolynomialIndex(double x)
        Returns the index of P, the Polynomial instance used to evaluate x, in an ArrayList table instance returned by getSplinePolynomials(). This index k gives also the interval in table X which contains the value x (i.e. such that xk < x <= xk+1).
        Returns:
        Index of the polynomial check with x in the Polynomial list returned by methodgetSplinePolynomials

DMelt 3.0 © DataMelt by jWork.ORG

You see the box below because you did not login.