next up previous 196
Next: PDA_C2NAG - Convert FFTPACK complex Fourier transform array into equivalent NAG arrays
Up: User-callable routines
Previous: PDA_BISPEV - Evaluates the bivariate spline approximation found by PDA_SURFIT.


PDA_BSPDOC - Documentation for working with piecewise polynomial functions in B-representation.

Origin
SLATEC / CAMSUN

      SUBROUTINE PDA_BSPDOC


***BEGIN PROLOGUE  PDA_BSPDOC
***PURPOSE  Documentation for BSPLINE, a package of subprograms for
            working with piecewise polynomial functions
            in B-representation.
***LIBRARY   SLATEC
***CATEGORY  E, E1A, K, Z
***TYPE      ALL (PDA_BSPDOC-A)
***KEYWORDS  B-SPLINE, DOCUMENTATION, SPLINES
***AUTHOR  Amos, D. E., (SNLA)
***DESCRIPTION

     Abstract
         PDA_BSPDOC is a non-executable, B-spline documentary routine.
         The narrative describes a B-spline and the routines
         necessary to manipulate B-splines at a fairly high level.
         The basic package described herein is that of reference
         5 with names altered to prevent duplication and conflicts
         with routines from reference 3.  The call lists used here
         are also different.  Work vectors were added to ensure
         portability and proper execution in an overlay environ-
         ment.  These work arrays can be used for other purposes
         except as noted in BSPVN.  While most of the original
         routines in reference 5 were restricted to orders 20
         or less, this restriction was removed from all routines
         except the quadrature routine BSQAD.  (See the section
         below on differentiation and integration for details.)

         The subroutines referenced below are single precision
         routines.  Corresponding double precision versions are also
         part of the package, and these are referenced by prefixing
         a D in front of the single precision name.  For example,
         BVALU and PDA_DBVALU are the single and double precision
         versions for evaluating a B-spline or any of its deriva-
         tives in the B-representation.

                ****Description of B-Splines****

     A collection of polynomials of fixed degree K-1 defined on a
     subdivision (X(I),X(I+1)), I=1,...,M-1 of (A,B) with X(1)=A,
     X(M)=B is called a B-spline of order K.  If the spline has K-2
     continuous derivatives on (A,B), then the B-spline is simply
     called a spline of order K.  Each of the M-1 polynomial pieces
     has K coefficients, making a total of K(M-1) parameters.  This
     B-spline and its derivatives have M-2 jumps at the subdivision
     points X(I), I=2,...,M-1.  Continuity requirements at these
     subdivision points add constraints and reduce the number of free
     parameters.  If a B-spline is continuous at each of the M-2 sub-
     division points, there are K(M-1)-(M-2) free parameters; if in
     addition the B-spline has continuous first derivatives, there
     are K(M-1)-2(M-2) free parameters, etc., until we get to a
     spline where we have K(M-1)-(K-1)(M-2) = M+K-2 free parameters.
     Thus, the principle is that increasing the continuity of
     derivatives decreases the number of free parameters and
     conversely.

     The points at which the polynomials are tied together by the
     continuity conditions are called knots.  If two knots are
     allowed to come together at some X(I), then we say that we
     have a knot of multiplicity 2 there, and the knot values are
     the X(I) value.  If we reverse the procedure of the first
     paragraph, we find that adding a knot to increase multiplicity
     increases the number of free parameters and, according to the
     principle above, we thereby introduce a discontinuity in what
     was the highest continuous derivative at that knot.  Thus, the
     number of free parameters is N = NU+K-2 where NU is the sum
     of multiplicities at the X(I) values with X(1) and X(M) of
     multiplicity 1 (NU = M if all knots are simple, i.e., for a
     spline, all knots have multiplicity 1.)  Each knot can have a
     multiplicity of at most K.  A B-spline is commonly written in the
     B-representation

               Y(X) = sum( A(I)*B(I,X), I=1 , N)

     to show the explicit dependence of the spline on the free
     parameters or coefficients A(I)=BCOEF(I) and basis functions
     B(I,X).  These basis functions are themselves special B-splines
     which are zero except on (at most) K adjoining intervals where
     each B(I,X) is positive and, in most cases, hat or bell-
     shaped.  In order for the nonzero part of B(1,X) to be a spline
     covering (X(1),X(2)), it is necessary to put K-1 knots to the
     left of A and similarly for B(N,X) to the right of B.  Thus, the
     total number of knots for this representation is NU+2K-2 = N+K.
     These knots are carried in an array T(*) dimensioned by at least
     N+K.  From the construction, A=T(K) and B=T(N+1) and the spline is
     defined on T(K).LE.X.LE.T(N+1).  The nonzero part of each basis
     function lies in the  Interval (T(I),T(I+K)).  In many problems
     where extrapolation beyond A or B is not anticipated, it is common
     practice to set T(1)=T(2)=...=T(K)=A and T(N+1)=T(N+2)=...=
     T(N+K)=B.  In summary, since T(K) and T(N+1) as well as
     interior knots can have multiplicity K, the number of free
     parameters N = sum of multiplicities - K.  The fact that each
     B(I,X) function is nonzero over at most K intervals means that
     for a given X value, there are at most K nonzero terms of the
     sum.  This leads to banded matrices in linear algebra problems,
     and references 3 and 6 take advantage of this in con-
     structing higher level routines to achieve speed and avoid
     ill-conditioning.

                     ****Basic Routines****

     The basic routines which most casual users will need are those
     concerned with direct evaluation of splines or B-splines.
     Since the B-representation, denoted by (T,BCOEF,N,K), is
     preferred because of numerical stability, the knots T(*), the
     B-spline coefficients BCOEF(*), the number of coefficients N,
     and the order K of the polynomial pieces (of degree K-1) are
     usually given.  While the knot array runs from T(1) to T(N+K),
     the B-spline is normally defined on the interval T(K).LE.X.LE.
     T(N+1).  To evaluate the B-spline or any of its derivatives
     on this interval, one can use

                  Y = BVALU(T,BCOEF,N,K,ID,X,INBV,WORK)

     where ID is an integer for the ID-th derivative, 0.LE.ID.LE.K-1.
     ID=0 gives the zero-th derivative or B-spline value at X.
     If X.LT.T(K) or X.GT.T(N+1), whether by mistake or the result
     of round off accumulation in incrementing X, BVALU gives a
     diagnostic.  INBV is an initialization parameter which is set
     to 1 on the first call.  Distinct splines require distinct
     INBV parameters.  WORK is a scratch vector of length at least
     3*K.

     When more conventional communication is needed for publication,
     physical interpretation, etc., the B-spline coefficients can
     be converted to piecewise polynomial (PP) coefficients.  Thus,
     the breakpoints (distinct knots) XI(*), the number of
     polynomial pieces LXI, and the (right) derivatives C(*,J) at
     each breakpoint XI(J) are needed to define the Taylor
     expansion to the right of XI(J) on each interval XI(J).LE.
     X.LT.XI(J+1), J=1,LXI where XI(1)=A and XI(LXI+1)=B.
     These are obtained from the (T,BCOEF,N,K) representation by

                CALL BSPPP(T,BCOEF,N,K,LDC,C,XI,LXI,WORK)

     where LDC.GE.K is the leading dimension of the matrix C and
     WORK is a scratch vector of length at least K*(N+3).
     Then the PP-representation (C,XI,LXI,K) of Y(X), denoted
     by Y(J,X) on each interval XI(J).LE.X.LT.XI(J+1), is

     Y(J,X) = sum( C(I,J)*((X-XI(J))**(I-1))/factorial(I-1), I=1,K)

     for J=1,...,LXI.  One must view this conversion from the B-
     to the PP-representation with some skepticism because the
     conversion may lose significant digits when the B-spline
     varies in an almost discontinuous fashion.  To evaluate
     the B-spline or any of its derivatives using the PP-
     representation, one uses

                Y = PPVAL(LDC,C,XI,LXI,K,ID,X,INPPV)

     where ID and INPPV have the same meaning and usage as ID and
     INBV in BVALU.

     To determine to what extent the conversion process loses
     digits, compute the relative error ABS((Y1-Y2)/Y2) over
     the X interval with Y1 from PPVAL and Y2 from BVALU.  A
     major reason for considering PPVAL is that evaluation is
     much faster than that from BVALU.

     Recall that when multiple knots are encountered, jump type
     discontinuities in the B-spline or its derivatives occur
     at these knots, and we need to know that BVALU and PPVAL
     return right limiting values at these knots except at
     X=B where left limiting values are returned.  These values
     are used for the Taylor expansions about left end points of
     breakpoint intervals.  That is, the derivatives C(*,J) are
     right derivatives.  Note also that a computed X value which,
     mathematically, would be a knot value may differ from the knot
     by a round off error.  When this happens in evaluating a dis-
     continuous B-spline or some discontinuous derivative, the
     value at the knot and the value at X can be radically
     different.  In this case, setting X to a T or XI value makes
     the computation precise.  For left limiting values at knots
     other than X=B, see the prologues to BVALU and other
     routines.

                     ****Interpolation****

     BINTK is used to generate B-spline parameters (T,BCOEF,N,K)
     which will interpolate the data by calls to BVALU.  A similar
     interpolation can also be done for cubic splines using BINT4
     or the code in reference 7.  If the PP-representation is given,
     one can evaluate this representation at an appropriate number of
     abscissas to create data then use BINTK or BINT4 to generate
     the B-representation.

               ****Differentiation and Integration****

     Derivatives of B-splines are obtained from BVALU or PPVAL.
     Integrals are obtained from BSQAD using the B-representation
     (T,BCOEF,N,K) and PPQAD using the PP-representation (C,XI,LXI,
     K).  More complicated integrals involving the product of a
     of a function F and some derivative of a B-spline can be
     evaluated with BFQAD or PFQAD using the B- or PP- represen-
     tations respectively.  All quadrature routines, except for PPQAD,
     are limited in accuracy to 18 digits or working precision,
     whichever is smaller.  PPQAD is limited to working precision
     only.  In addition, the order K for BSQAD is limited to 20 or
     less.  If orders greater than 20 are required, use BFQAD with
     F(X) = 1.

                      ****Extrapolation****

     Extrapolation outside the interval (A,B) can be accomplished
     easily by the PP-representation using PPVAL.  However,
     caution should be exercised, especially when several knots
     are located at A or B or when the extrapolation is carried
     significantly beyond A or B.  On the other hand, direct
     evaluation with BVALU outside A=T(K).LE.X.LE.T(N+1)=B
     produces an error message, and some manipulation of the knots
     and coefficients are needed to extrapolate with BVALU.  This
     process is described in reference 6.

                ****Curve Fitting and Smoothing****

     Unless one has many accurate data points, direct inter-
     polation is not recommended for summarizing data.  The
     results are often not in accordance with intuition since the
     fitted curve tends to oscillate through the set of points.
     Monotone splines (reference 7) can help curb this undulating
     tendency but constrained least squares is more likely to give an
     acceptable fit with fewer parameters.  Subroutine FC, des-
     cribed in reference 6, is recommended for this purpose.  The
     output from this fitting process is the B-representation.

              **** Routines in the B-Spline Package ****

                      Single Precision Routines

         The subroutines referenced below are SINGLE PRECISION
         routines. Corresponding DOUBLE PRECISION versions are also
         part of the package and these are referenced by prefixing
         a D in front of the single precision name. For example,
         BVALU and PDA_DBVALU are the SINGLE and DOUBLE PRECISION
         versions for evaluating a B-spline or any of its deriva-
         tives in the B-representation.

     BINT4 - interpolates with splines of order 4
     BINTK - interpolates with splines of order k
     BSQAD - integrates the B-representation on subintervals
     PPQAD - integrates the PP-representation
     BFQAD - integrates the product of a function F and any spline
             derivative in the B-representation
     PFQAD - integrates the product of a function F and any spline
             derivative in the PP-representation
     BVALU - evaluates the B-representation or a derivative
     PPVAL - evaluates the PP-representation or a derivative
     INTRV - gets the largest index of the knot to the left of x
     BSPPP - converts from B- to PP-representation
     BSPVD - computes nonzero basis functions and derivatives at x
     BSPDR - sets up difference array for BSPEV
     BSPEV - evaluates the B-representation and derivatives
     BSPVN - called by BSPEV, BSPVD, BSPPP and BINTK for function and
             derivative evaluations
                        Auxiliary Routines

       BSGQ8,PPGQ8,BNSLV,BNFAC,PDA_XERMSG,DBSGQ8,DPPGQ8,PDA_DBNSLV,PDA_DBNFAC

                    Machine Dependent Routines

                      PDA_I1MACH, R1MACH, PDA_D1MACH

***REFERENCES  1. D. E. Amos, Computation with splines and
                 B-splines, Report SAND78-1968, Sandia
                 Laboratories, March 1979.
               2. D. E. Amos, Quadrature subroutines for splines and
                 B-splines, Report SAND79-1825, Sandia Laboratories,
                 December 1979.
               3. Carl de Boor, A Practical Guide to Splines, Applied
                 Mathematics Series 27, Springer-Verlag, New York,
                 1978.
               4. Carl de Boor, On calculating with B-Splines, Journal
                 of Approximation Theory 6, (1972), pp. 50-62.
               5. Carl de Boor, Package for calculating with B-splines,
                 SIAM Journal on Numerical Analysis 14, 3 (June 1977),
                 pp. 441-472.
               6. R. J. Hanson, Constrained least squares curve fitting
                 to discrete data using B-splines, a users guide,
                 Report SAND78-1291, Sandia Laboratories, December
                 1978.
               7. F. N. Fritsch and R. E. Carlson, Monotone piecewise
                 cubic interpolation, SIAM Journal on Numerical Ana-
                 lysis 17, 2 (April 1980), pp. 238-246.
***ROUTINES CALLED  (NONE)
***REVISION HISTORY  (YYMMDD)
   810223  DATE WRITTEN
   861211  REVISION DATE from Version 3.2
   891214  Prologue converted to Version 4.0 format.  (BAB)
   900723  PURPOSE section revised.  (WRB)
   920501  Reformatted the REFERENCES section.  (WRB)
***END PROLOGUE  PDA_BSPDOC



next up previous 196
Next: PDA_C2NAG - Convert FFTPACK complex Fourier transform array into equivalent NAG arrays
Up: User-callable routines
Previous: PDA_BISPEV - Evaluates the bivariate spline approximation found by PDA_SURFIT.

PDA [1ex
Starlink User Note 194
H. Meyerdierks, D. Berry, P. W. Draper, G. Privett, M. Currie
12th October 2005
E-mail:ussc@star.rl.ac.uk

Copyright © 2009 Science and Technology Facilities Council