dcsevl.f

Go to the documentation of this file.
00001 *DECK DCSEVL
00002       DOUBLE PRECISION FUNCTION DCSEVL (X, CS, N)
00003 C***BEGIN PROLOGUE  DCSEVL
00004 C***PURPOSE  Evaluate a Chebyshev series.
00005 C***LIBRARY   SLATEC (FNLIB)
00006 C***CATEGORY  C3A2
00007 C***TYPE      DOUBLE PRECISION (CSEVL-S, DCSEVL-D)
00008 C***KEYWORDS  CHEBYSHEV SERIES, FNLIB, SPECIAL FUNCTIONS
00009 C***AUTHOR  Fullerton, W., (LANL)
00010 C***DESCRIPTION
00011 C
00012 C  Evaluate the N-term Chebyshev series CS at X.  Adapted from
00013 C  a method presented in the paper by Broucke referenced below.
00014 C
00015 C       Input Arguments --
00016 C  X    value at which the series is to be evaluated.
00017 C  CS   array of N terms of a Chebyshev series.  In evaluating
00018 C       CS, only half the first coefficient is summed.
00019 C  N    number of terms in array CS.
00020 C
00021 C***REFERENCES  R. Broucke, Ten subroutines for the manipulation of
00022 C                 Chebyshev series, Algorithm 446, Communications of
00023 C                 the A.C.M. 16, (1973) pp. 254-256.
00024 C               L. Fox and I. B. Parker, Chebyshev Polynomials in
00025 C                 Numerical Analysis, Oxford University Press, 1968,
00026 C                 page 56.
00027 C***ROUTINES CALLED  D1MACH, XERMSG
00028 C***REVISION HISTORY  (YYMMDD)
00029 C   770401  DATE WRITTEN
00030 C   890831  Modified array declarations.  (WRB)
00031 C   890831  REVISION DATE from Version 3.2
00032 C   891214  Prologue converted to Version 4.0 format.  (BAB)
00033 C   900315  CALLs to XERROR changed to CALLs to XERMSG.  (THJ)
00034 C   900329  Prologued revised extensively and code rewritten to allow
00035 C           X to be slightly outside interval (-1,+1).  (WRB)
00036 C   920501  Reformatted the REFERENCES section.  (WRB)
00037 C***END PROLOGUE  DCSEVL
00038       DOUBLE PRECISION B0, B1, B2, CS(*), ONEPL, TWOX, X, D1MACH
00039       LOGICAL FIRST
00040       SAVE FIRST, ONEPL
00041       DATA FIRST /.TRUE./
00042 C***FIRST EXECUTABLE STATEMENT  DCSEVL
00043       IF (FIRST) ONEPL = 1.0D0 + D1MACH(4)
00044       FIRST = .FALSE.
00045       IF (N .LT. 1) CALL XERMSG ('SLATEC', 'DCSEVL',
00046      +   'NUMBER OF TERMS .LE. 0', 2, 2)
00047       IF (N .GT. 1000) CALL XERMSG ('SLATEC', 'DCSEVL',
00048      +   'NUMBER OF TERMS .GT. 1000', 3, 2)
00049       IF (ABS(X) .GT. ONEPL) CALL XERMSG ('SLATEC', 'DCSEVL',
00050      +   'X OUTSIDE THE INTERVAL (-1,+1)', 1, 1)
00051 C
00052       B1 = 0.0D0
00053       B0 = 0.0D0
00054       TWOX = 2.0D0*X
00055       DO 10 I = 1,N
00056          B2 = B1
00057          B1 = B0
00058          NI = N + 1 - I
00059          B0 = TWOX*B1 - B2 + CS(NI)
00060    10 CONTINUE
00061 C
00062       DCSEVL = 0.5D0*(B0-B2)
00063 C
00064       RETURN
00065       END
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Defines