BSDER

This function evaluates the derivative of a spline, given its B-spline representation.

Function Return Value

BSDER — Value of the IDERIV-th derivative of the spline at X.   (Output)

Required Arguments

IDERIV — Order of the derivative to be evaluated.   (Input)
In particular, IDERIV = 0 returns the value of the spline.

X — Point at which the spline is to be evaluated.   (Input)

KORDER — Order of the spline.   (Input)

XKNOT — Array of length NCOEF + KORDER containing the knot sequence.   (Input)
XKNOT must be nondecreasing.

NCOEF — Number of B-spline coefficients.   (Input)

BSCOEF — Array of length NCOEF containing the B-spline coefficients.   (Input)

FORTRAN 90 Interface

Generic:          BSDER (IDERIV, X, KORDER, XKNOT, NCOEF, BSCOEF)

Specific:         The specific interface names are S_BSDER and D_BSDER.

FORTRAN 77 Interface

Single:            BSDER (IDERIV, X, KORDER, XKNOT, NCOEF, BSCOEF)

Double:          The double precision function name is DBSDER.

Description

The function BSDER produces the value of a spline or one of its derivatives (given its B-spline representation) at a specific point. The function BSDER is based on the routine BVALUE by de Boor (1978, page 144).

Specifically, given the knot vector t, the number of coefficients N, the coefficient vector a, the order of the derivative i and a point x, BSDER returns the number

where Bj,k is the j-th B-spline of order k for the knot sequence t. Note that this function routine arbitrarily treats these functions as if they were right continuous near XKNOT(KORDER) and left continuous near XKNOT(NCOEF + 1). Thus, if we have KORDER knots stacked at the left or right end point, and if we try to evaluate at these end points, then we will get the value of the limit from the interior of the interval.

Comments

1.     Workspace may be explicitly provided, if desired, by use of B2DER/DB2DER. The reference is:

CALL B2DER(IDERIV, X, KORDER, XKNOT, NCOEF, BSCOEF, WK1, WK2, WK3)

The additional arguments are as follows:

WK1 — Array of length KORDER.

WK2 — Array of length KORDER.

WK3 — Array of length KORDER.

2.         Informational errors

Type   Code

4           4                  Multiplicity of the knots cannot exceed the order of the spline.

4           5                  The knots must be nondecreasing.

Example

A spline interpolant to the function

is constructed using BSINT. The B-spline representation, which is returned by the IMSL routine BSINT, is then used by BSDER to compute the value and derivative of the interpolant. The output consists of the interpolation values and the error at the data points and the midpoints. In addition, we display the value of the derivative and the error at these same points.

 

      USE BSDER_INT

      USE BSINT_INT

      USE BSNAK_INT

      USE UMACH_INT

 

      IMPLICIT   NONE

      INTEGER    KORDER, NDATA, NKNOT

      PARAMETER  (KORDER=3, NDATA=5, NKNOT=NDATA+KORDER)

!

      INTEGER    I, NCOEF, NOUT

      REAL       BSCOEF(NDATA), BT0, BT1, DF, F, FDATA(NDATA),&

                 FLOAT, SQRT, X, XDATA(NDATA), XKNOT(NKNOT), XT

      INTRINSIC  FLOAT, SQRT

!                                  Define function and derivative

      F(X)  = SQRT(X)

      DF(X) = 0.5/SQRT(X)

!                                  Set up interpolation points

      DO 10  I=1, NDATA

         XDATA(I) = FLOAT(I)/FLOAT(NDATA)

         FDATA(I) = F(XDATA(I))

   10 CONTINUE

!                                  Generate knot sequence

      CALL BSNAK (NDATA, XDATA, KORDER, XKNOT)

!                                  Interpolate

      CALL BSINT (NDATA, XDATA, FDATA, KORDER, XKNOT, BSCOEF)

!                                  Get output unit number

      CALL UMACH (2, NOUT)

!                                  Write heading

      WRITE (NOUT,99999)

!                                  Print on a finer grid

      NCOEF = NDATA

      XT    = XDATA(1)

!                                  Evaluate spline

      BT0   = BSDER(0,XT,KORDER,XKNOT,NCOEF,BSCOEF)

      BT1   = BSDER(1,XT,KORDER,XKNOT,NCOEF,BSCOEF)

      WRITE (NOUT,99998) XT, BT0, F(XT) - BT0, BT1, DF(XT) - BT1

      DO 20  I=2, NDATA

         XT  = (XDATA(I-1)+XDATA(I))/2.0

!                                  Evaluate spline

         BT0 = BSDER(0,XT,KORDER,XKNOT,NCOEF,BSCOEF)

         BT1 = BSDER(1,XT,KORDER,XKNOT,NCOEF,BSCOEF)

         WRITE (NOUT,99998) XT, BT0, F(XT) - BT0, BT1, DF(XT) - BT1

         XT  = XDATA(I)

!                                  Evaluate spline

         BT0 = BSDER(0,XT,KORDER,XKNOT,NCOEF,BSCOEF)

         BT1 = BSDER(1,XT,KORDER,XKNOT,NCOEF,BSCOEF)

         WRITE (NOUT,99998) XT, BT0, F(XT) - BT0, BT1, DF(XT) - BT1

   20 CONTINUE

99998 FORMAT (' ', F6.4, 5X, F7.4, 3X, F10.6, 5X, F8.4, 3X, F10.6)

 

 

99999 FORMAT (6X, 'X', 8X, 'S(X)', 7X, 'Error', 8X, 'S''(X)', 8X,&

             'Error', /)

      END

Output

 

     X        S(X)       Error        S'(X)        Error

0.2000      0.4472     0.000000       1.0423     0.075738
0.3000      0.5456     0.002084       0.9262    -0.013339
0.4000      0.6325     0.000000       0.8101    -0.019553
0.5000      0.7077    -0.000557       0.6940     0.013071
0.6000      0.7746     0.000000       0.6446     0.000869
0.7000      0.8366     0.000071       0.5952     0.002394
0.8000      0.8944     0.000000       0.5615    -0.002525
0.9000      0.9489    -0.000214       0.5279    -0.000818
1.0000      1.0000     0.000000       0.4942     0.005814


Visual Numerics, Inc.
Visual Numerics - Developers of IMSL and PV-WAVE
http://www.vni.com/
PHONE: 713.784.3131
FAX:713.781.9260