123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- *DECK DPPVAL
- DOUBLE PRECISION FUNCTION DPPVAL (LDC, C, XI, LXI, K, IDERIV, X,
- + INPPV)
- C***BEGIN PROLOGUE DPPVAL
- C***PURPOSE Calculate the value of the IDERIV-th derivative of the
- C B-spline from the PP-representation.
- C***LIBRARY SLATEC
- C***CATEGORY E3, K6
- C***TYPE DOUBLE PRECISION (PPVAL-S, DPPVAL-D)
- C***KEYWORDS B-SPLINE, DATA FITTING, INTERPOLATION, SPLINES
- C***AUTHOR Amos, D. E., (SNLA)
- C***DESCRIPTION
- C
- C Written by Carl de Boor and modified by D. E. Amos
- C
- C Abstract **** a double precision routine ****
- C DPPVAL is the PPVALU function of the reference.
- C
- C DPPVAL calculates (at X) the value of the IDERIV-th
- C derivative of the B-spline from the PP-representation
- C (C,XI,LXI,K). The Taylor expansion about XI(J) for X in
- C the interval XI(J) .LE. X .LT. XI(J+1) is evaluated, J=1,LXI.
- C Right limiting values at X=XI(J) are obtained. DPPVAL will
- C extrapolate beyond XI(1) and XI(LXI+1).
- C
- C To obtain left limiting values (left derivatives) at XI(J)
- C replace LXI by J-1 and set X=XI(J),J=2,LXI+1.
- C
- C Description of Arguments
- C
- C Input C,XI,X are double precision
- C LDC - leading dimension of C matrix, LDC .GE. K
- C C - matrix of dimension at least (K,LXI) containing
- C right derivatives at break points XI(*).
- C XI - break point vector of length LXI+1
- C LXI - number of polynomial pieces
- C K - order of B-spline, K .GE. 1
- C IDERIV - order of the derivative, 0 .LE. IDERIV .LE. K-1
- C IDERIV=0 gives the B-spline value
- C X - argument, XI(1) .LE. X .LE. XI(LXI+1)
- C INPPV - an initialization parameter which must be set
- C to 1 the first time DPPVAL is called.
- C
- C Output DPPVAL is double precision
- C INPPV - INPPV contains information for efficient process-
- C ing after the initial call and INPPV must not
- C be changed by the user. Distinct splines require
- C distinct INPPV parameters.
- C DPPVAL - value of the IDERIV-th derivative at X
- C
- C Error Conditions
- C Improper input is a fatal error
- C
- C***REFERENCES Carl de Boor, Package for calculating with B-splines,
- C SIAM Journal on Numerical Analysis 14, 3 (June 1977),
- C pp. 441-472.
- C***ROUTINES CALLED DINTRV, XERMSG
- C***REVISION HISTORY (YYMMDD)
- C 800901 DATE WRITTEN
- C 890831 Modified array declarations. (WRB)
- C 890831 REVISION DATE from Version 3.2
- C 891214 Prologue converted to Version 4.0 format. (BAB)
- C 900315 CALLs to XERROR changed to CALLs to XERMSG. (THJ)
- C 920501 Reformatted the REFERENCES section. (WRB)
- C***END PROLOGUE DPPVAL
- C
- INTEGER I, IDERIV, INPPV, J, K, LDC, LXI, NDUMMY, KK
- DOUBLE PRECISION C, DX, X, XI
- DIMENSION XI(*), C(LDC,*)
- C***FIRST EXECUTABLE STATEMENT DPPVAL
- DPPVAL = 0.0D0
- IF(K.LT.1) GO TO 90
- IF(LDC.LT.K) GO TO 80
- IF(LXI.LT.1) GO TO 85
- IF(IDERIV.LT.0 .OR. IDERIV.GE.K) GO TO 95
- I = K - IDERIV
- KK = I
- CALL DINTRV(XI, LXI, X, INPPV, I, NDUMMY)
- DX = X - XI(I)
- J = K
- 10 DPPVAL = (DPPVAL/KK)*DX + C(J,I)
- J = J - 1
- KK = KK - 1
- IF (KK.GT.0) GO TO 10
- RETURN
- C
- C
- 80 CONTINUE
- CALL XERMSG ('SLATEC', 'DPPVAL', 'LDC DOES NOT SATISFY LDC.GE.K',
- + 2, 1)
- RETURN
- 85 CONTINUE
- CALL XERMSG ('SLATEC', 'DPPVAL', 'LXI DOES NOT SATISFY LXI.GE.1',
- + 2, 1)
- RETURN
- 90 CONTINUE
- CALL XERMSG ('SLATEC', 'DPPVAL', 'K DOES NOT SATISFY K.GE.1', 2,
- + 1)
- RETURN
- 95 CONTINUE
- CALL XERMSG ('SLATEC', 'DPPVAL',
- + 'IDERIV DOES NOT SATISFY 0.LE.IDERIV.LT.K', 2, 1)
- RETURN
- END
|