CSDER
This function evaluates the derivative of a cubic spline.
Function Return Value
CSDER — Value of the IDERIV-th derivative of the polynomial at X. (Output)
Required Arguments
IDERIV — Order of the derivative to be evaluated. (Input)
In particular, IDERIV = 0 returns the value of the polynomial.
X — Point at which the polynomial is to be evaluated. (Input)
BREAK — Array of length NINTV + 1 containing the breakpoints for the piecewise cubic representation. (Input)
BREAK must be strictly increasing.
CSCOEF — Matrix of size 4 by NINTV + 1 containing the local coefficients of the cubic pieces. (Input)
Optional Arguments
NINTV — Number of polynomial pieces. (Input)
Default: NINTV = size (BREAK,1)-1.
FORTRAN 90 Interface
Generic: CSDER (IDERIV, X, BREAK, CSCOEF, CSDER [, …])
Specific: The specific interface names are S_CSDER and D_CSDER.
FORTRAN 77 Interface
Single: CSDER (IDERIV, X, NINTV, BREAK, CSCOEF)
Double: The double precision function name is DCSDER.
Description
The function CSDER evaluates the derivative of a cubic spline at a given point. It is a special case of the routine PPDER, which evaluates the derivative of a piecewise polynomial. (A cubic spline is a piecewise polynomial of order 4.) The routine PPDER is based on the routine PPVALU in de Boor (1978, page 89).
Example
In this example, we compute a cubic spline interpolant to a function f using IMSL routine CSINT. The values of the spline and its first and second derivatives are computed using CSDER. These values can then be compared with the corresponding values of the interpolated function.
USE CSDER_INT
USE CSINT_INT
USE UMACH_INT
IMPLICIT NONE
INTEGER NDATA
PARAMETER (NDATA=10)
!
INTEGER I, NINTV, NOUT
REAL BREAK(NDATA), CDDF, CDF, CF, COS, CSCOEF(4,NDATA),&
DDF, DF, F, FDATA(NDATA), FLOAT, SIN, X,&
XDATA(NDATA)
INTRINSIC COS, FLOAT, SIN
! Define function and derivatives
F(X) = SIN(15.0*X)
DF(X) = 15.0*COS(15.0*X)
DDF(X) = -225.0*SIN(15.0*X)
! Set up a grid
DO 10 I=1, NDATA
XDATA(I) = FLOAT(I-1)/FLOAT(NDATA-1)
FDATA(I) = F(XDATA(I))
10 CONTINUE
! Compute cubic spline interpolant
CALL CSINT (XDATA, FDATA, BREAK, CSCOEF)
! Get output unit number
CALL UMACH (2, NOUT)
! Write heading
WRITE (NOUT,99999)
99999 FORMAT (9X, 'X', 8X, 'S(X)', 5X, 'Error', 6X, 'S''(X)', 5X,&
'Error', 6X, 'S''''(X)', 4X, 'Error', /)
NINTV = NDATA - 1
! Print the interpolant on a finer grid
DO 20 I=1, 2*NDATA
X = FLOAT(I-1)/FLOAT(2*NDATA-1)
CF = CSDER(0,X,BREAK,CSCOEF)
CDF = CSDER(1,X,BREAK,CSCOEF)
CDDF = CSDER(2,X,BREAK,CSCOEF)
WRITE (NOUT,'(F11.3, 3(F11.3, F11.6))') X, CF, F(X) - CF,&
CDF, DF(X) - CDF,&
CDDF, DDF(X) - CDDF
20 CONTINUE
END
X S(X) Error S’(X) Error S’’(X) Error
0.000 0.000 0.000000 26.285 -11.284739 -379.458 379.457794
0.053 0.902 -0.192203 8.841 1.722460 -283.411 123.664734
0.105 1.019 -0.019333 -3.548 3.425718 -187.364 -37.628586
0.158 0.617 0.081009 -10.882 0.146207 -91.317 -65.824875
0.211 -0.037 0.021155 -13.160 -1.837700 4.730 -1.062027
0.263 -0.674 -0.046945 -10.033 -0.355268 117.916 44.391640
0.316 -0.985 -0.015060 -0.719 1.086203 235.999 -11.066727
0.368 -0.682 -0.004651 11.314 -0.409097 154.861 -0.365387
0.421 0.045 -0.011915 14.708 0.284042 -25.887 18.552732
0.474 0.708 0.024292 9.508 0.702690 -143.785 -21.041260
0.526 0.978 0.020854 0.161 -0.771948 -211.402 -13.411087
0.579 0.673 0.001410 -11.394 0.322443 -163.483 11.674103
0.632 -0.064 0.015118 -14.937 -0.045511 28.856 -17.856323
0.684 -0.724 -0.019246 -8.859 -1.170871 163.866 3.435547
0.737 -0.954 -0.044143 0.301 0.554493 184.217 40.417282
0.789 -0.675 0.012143 10.307 0.928152 166.021 -16.939514
0.842 0.027 0.038176 15.015 -0.047344 12.914 -27.575521
0.895 0.764 -0.010112 11.666 -1.819128 -140.193 -29.538193
0.947 1.114 -0.116304 0.258 -1.357680 -293.301 68.905701
1.000 0.650 0.000000 -19.208 7.812407 -446.408 300.092896