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 aes­
       thetically 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  equiva­
       lent.   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  abscis­
       sas  (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.  Obvi­
       ously, 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 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  vec­
       tor),  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 sim­
       ple 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

       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 repre­
              sented 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 increas­
              ing.  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 compo­
              nents 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 increas­
              ing.  Sy is the name of the vector where the calcu­
              lated 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

       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


Man(1) output converted with man2html