C----------------------------------------------------------------------- C IMSL Name: BS1GD/DBS1GD (Single/Double precision version) C C Purpose: Evaluate the derivative of a spline on a grid, given C its B-spline representation. C C Usage: CALL BS1GD (IDERIV, N, XVEC, KORDER, XKNOT, NCOEF, C BSCOEF, VALUE) C C Example 1: INTEGER KORDER, NDATA, NKNOT, NFGRID PARAMETER (KORDER=3, NDATA=5, NKNOT=NDATA+KORDER, NFGRID = 9) C SPECIFICATIONS FOR LOCAL VARIABLES INTEGER I, NCOEF, NOUT REAL ANS0(NFGRID), ANS1(NFGRID), BSCOEF(NDATA), & FDATA(NDATA), & X, XDATA(NDATA), XKNOT(NKNOT), XVEC(NFGRID) C SPECIFICATIONS FOR INTRINSICS INTRINSIC FLOAT, SQRT REAL FLOAT, SQRT C SPECIFICATIONS FOR SUBROUTINES EXTERNAL BS1GD, BSINT, BSNAK, UMACH REAL DF, F C F(X) = SQRT(X) DF(X) = 0.5/SQRT(X) C CALL UMACH (2, NOUT) C Set up interpolation points DO 10 I=1, NDATA XDATA(I) = FLOAT(I)/FLOAT(NDATA) FDATA(I) = F(XDATA(I)) 10 CONTINUE CALL BSNAK (NDATA, XDATA, KORDER, XKNOT) C Interpolate CALL BSINT (NDATA, XDATA, FDATA, KORDER, XKNOT, BSCOEF) WRITE (NOUT,99999) C Print on a finer grid NCOEF = NDATA XVEC(1) = XDATA(1) DO 20 I=2, 2*NDATA - 2, 2 XVEC(I) = (XDATA(I/2+1)+XDATA(I/2))/2.0 XVEC(I+1) = XDATA(I/2+1) 20 CONTINUE CALL BS1GD (0, 2*NDATA-1, XVEC, KORDER, XKNOT, NCOEF, BSCOEF, & ANS0) CALL BS1GD (1, 2*NDATA-1, XVEC, KORDER, XKNOT, NCOEF, BSCOEF, & ANS1) DO 30 I=1, 2*NDATA - 1 WRITE (NOUT,99998) XVEC(I), ANS0(I), F(XVEC(I)) - ANS0(I), & ANS1(I), DF(XVEC(I)) - ANS1(I) 30 CONTINUE 99998 FORMAT (' ', F6.4, 5X, F7.4, 5X, F8.4, 5X, F8.4, 5X, F8.4) 99999 FORMAT (6X, 'X', 8X, 'S(X)', 7X, 'Error', 8X, 'S''(X)', 8X, & 'Error', /) END C X S(X) Error S'(X) Error C C 0.2000 0.4472 0.0000 1.0423 0.0757 C 0.3000 0.5456 0.0021 0.9262 -0.0133 C 0.4000 0.6325 0.0000 0.8101 -0.0196 C 0.5000 0.7077 -0.0006 0.6940 0.0131 C 0.6000 0.7746 0.0000 0.6446 0.0009 C 0.7000 0.8366 0.0001 0.5952 0.0024 C 0.8000 0.8944 0.0000 0.5615 -0.0025 C 0.9000 0.9489 -0.0002 0.5279 -0.0008 C 1.0000 1.0000 0.0000 0.4942 0.0058