Provided by: blt-dev_2.5.3+dfsg-4_amd64 bug

NAME

       spline -  Fit curves with spline interpolation

SYNOPSIS

       spline natural x y sx sy

       spline quadratic x y sx sy
_________________________________________________________________

DESCRIPTION

       The spline command computes a spline fitting a set of data points (x and y vectors) and produces a vector
       of the interpolated images (y-coordinates) at a given set of x-coordinates.

INTRODUCTION

       Curve fitting has many applications.  In graphs, curve fitting can be useful for displaying curves  which
       are  aesthetically  pleasing  to  the  eye.  Another advantage is that you can quickly generate arbitrary
       points on the curve from a small set of data points.

       A spline is a device used in drafting to produce smoothed curves.  The points  of  the  curve,  known  as
       knots,  are  fixed  and  the spline, typically a thin strip of wood or metal, is bent around the knots to
       create the smoothed curve.  Spline interpolation is the  mathematical  equivalent.   The  curves  between
       adjacent knots are piecewise functions such that the resulting spline runs exactly through all the knots.
       The order and coefficients of the polynominal determine the "looseness" or "tightness" of the  curve  fit
       from the line segments formed by the knots.

       The  spline  command  performs  spline  interpolation  using  cubic  ("natural")  or quadratic polynomial
       functions.  It computes the spline based upon the knots, which  are  given  as  x  and  y  vectors.   The
       interpolated  new  points are determined by another vector which represents the abscissas (x-coordinates)
       or the new points.  The ordinates (y-coordinates) are  interpolated  using  the  spline  and  written  to
       another vector.

EXAMPLE

       Before we can use the spline command, we need to create two BLT vectors which will represent the knots (x
       and y coordinates) of the data that we're going to fit.  Obviously, both vectors must be the same length.

              # Create sample data of ten points.
              vector x(10) y(10)

              for {set i 10} {$i > 0} {incr i -1} {
                  set x($i-1) [expr $i*$i]
                  set y($i-1) [expr sin($i*$i*$i)]
              }

       We now have two vectors x and y representing the ten data points we're trying to fit.  The order  of  the
       values  of  x  must  be  monotonically  increasing.   We  can use the vector's sort operation to sort the
       vectors.

              x sort y

       The components of x are sorted in increasing order.  The components of  y  are  rearranged  so  that  the
       original x,y coordinate pairings are retained.

       A  third  vector is needed to indicate the abscissas (x-coordinates) of the new points to be interpolated
       by the spline.  Like the x vector, the vector of abscissas must be  monotonically  increasing.   All  the
       abscissas must lie between the first and last knots (x vector) forming the spline.

       How  the  abscissas  are  picked  is  arbitrary.  But if we are going to plot the spline, we will want to
       include the knots too.  Since both the quadratic and natural splines preserve the knots (an abscissa from
       the  x  vector  will always produce the corresponding ordinate from the y vector), we can simply make the
       new vector a superset of x.  It will contain the same coordinates as x, but also the abscissas of the new
       points we want interpolated.  A simple way is to use the vector's populate operation.

              x populate sx 10

       This  creates  a  new vector sx.  It contains the abscissas of x, but in addition sx will have ten evenly
       distributed values between each abscissa.  You can interpolate any points you wish, simply by setting the
       vector values.

       Finally,  we  generate  the ordinates (the images of the spline) using the spline command.  The ordinates
       are stored in a fourth vector.

              spline natural x y sx sy

       This creates a new vector sy.  It will have the same length as sx.  The vectors sx and sy  represent  the
       smoothed curve which we can now plot.

              graph .graph
              .graph element create original -x x -y x -color blue
              .graph element create spline -x sx -y sy -color red
              table . .graph

       The  natural  operation  employs a cubic interpolant when forming the spline.  In terms of the draftmen's
       spline, a natural spline requires the least amount of energy to bend the spline (strip  of  wood),  while
       still  passing  through  each  knot.  In mathematical terms, the second derivatives of the first and last
       points are zero.

       Alternatively, you can generate a spline using the quadratic operation.  Quadratic interpolation produces
       a spline which follows the line segments of the data points much more closely.

              spline quadratic x y sx sy

OPERATIONS

       spline natural x y sx sy
              Computes  a  cubic spline from the data points represented by the vectors x and y and interpolates
              new points using vector sx as the x-coordinates.  The resulting y-coordinates are written to a new
              vector sy. The vectors x and y must be the same length and contain at least three components.  The
              order of the components of x must be monotonically increasing.  Sx is the vector containing the x-
              coordinates of the points to be interpolated.  No component of sx can be less than first component
              of x or greater than the last component.  The order of the components of sx must be  monotonically
              increasing.   Sy  is the name of the vector where the calculated y-coordinates will be stored.  If
              sy does not already exist, a new vector will be created.

       spline quadratic x y sx sy
              Computes a quadratic spline from  the  data  points  represented  by  the  vectors  x  and  y  and
              interpolates  new  points  using  vector sx as the x-coordinates.  The resulting y-coordinates are
              written to a new vector sy.  The vectors x and y must be the same  length  and  contain  at  least
              three  components.   The order of the components of x must be monotonically increasing.  Sx is the
              vector containing the x-coordinates of the points to be interpolated. No component of  sx  can  be
              less than first component of x or greater than the last component.  The order of the components of
              sx must be monotonically increasing.  Sy is the  name  of  the  vector  where  the  calculated  y-
              coordinates are stored.  If sy does not already exist, a new vector will be created.

REFERENCES

       Numerical Analysis
       by R. Burden, J. Faires and A. Reynolds.
       Prindle, Weber & Schmidt, 1981, pp. 112

       Shape Preserving Quadratic Splines
       by D.F.Mcallister & J.A.Roulier
       Coded by S.L.Dodd & M.Roulier N.C.State University.

       The original code for the quadratric spline can be found in TOMS #574.

KEYWORDS

       spline, vector, graph