123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- *DECK DPLINT
- SUBROUTINE DPLINT (N, X, Y, C)
- C***BEGIN PROLOGUE DPLINT
- C***PURPOSE Produce the polynomial which interpolates a set of discrete
- C data points.
- C***LIBRARY SLATEC
- C***CATEGORY E1B
- C***TYPE DOUBLE PRECISION (POLINT-S, DPLINT-D)
- C***KEYWORDS POLYNOMIAL INTERPOLATION
- C***AUTHOR Huddleston, R. E., (SNLL)
- C***DESCRIPTION
- C
- C Abstract
- C Subroutine DPLINT is designed to produce the polynomial which
- C interpolates the data (X(I),Y(I)), I=1,...,N. DPLINT sets up
- C information in the array C which can be used by subroutine DPOLVL
- C to evaluate the polynomial and its derivatives and by subroutine
- C DPOLCF to produce the coefficients.
- C
- C Formal Parameters
- C *** All TYPE REAL variables are DOUBLE PRECISION ***
- C N - the number of data points (N .GE. 1)
- C X - the array of abscissas (all of which must be distinct)
- C Y - the array of ordinates
- C C - an array of information used by subroutines
- C ******* Dimensioning Information *******
- C Arrays X,Y, and C must be dimensioned at least N in the calling
- C program.
- C
- C***REFERENCES L. F. Shampine, S. M. Davenport and R. E. Huddleston,
- C Curve fitting by polynomials in one variable, Report
- C SLA-74-0270, Sandia Laboratories, June 1974.
- C***ROUTINES CALLED XERMSG
- C***REVISION HISTORY (YYMMDD)
- C 740601 DATE WRITTEN
- C 891006 Cosmetic changes to prologue. (WRB)
- C 891006 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 DPLINT
- INTEGER I,K,KM1,N
- DOUBLE PRECISION DIF,C(*),X(*),Y(*)
- C***FIRST EXECUTABLE STATEMENT DPLINT
- IF (N .LE. 0) GO TO 91
- C(1)=Y(1)
- IF(N .EQ. 1) RETURN
- DO 10010 K=2,N
- C(K)=Y(K)
- KM1=K-1
- DO 10010 I=1,KM1
- C CHECK FOR DISTINCT X VALUES
- DIF = X(I)-X(K)
- IF (DIF .EQ. 0.0) GO TO 92
- C(K) = (C(I)-C(K))/DIF
- 10010 CONTINUE
- RETURN
- 91 CALL XERMSG ('SLATEC', 'DPLINT', 'N IS ZERO OR NEGATIVE.', 2, 1)
- RETURN
- 92 CALL XERMSG ('SLATEC', 'DPLINT',
- + 'THE ABSCISSAS ARE NOT DISTINCT.', 2, 1)
- RETURN
- END
|