CHEBFIT Name
      CHEBFIT
Author
  
   Craig B. Markwardt, NASA/GSFC Code 662, Greenbelt, MD 20770 
  
   craigm@lheamail.gsfc.nasa.gov 
  
   UPDATED VERSIONs can be found on my WEB PAGE:  
      
      http://cow.physics.wisc.edu/~craigm/idl/idl.html
Purpose
  
   Fit Chebyshev polynomial coefficients to a tabulated function
Major Topics
      Curve and Surface Fitting
Calling Sequence
  
   p = CHEBFIT(X, Y, ERR, INTERVAL=interval, NMAX=nmax,
              
               PRECISION=prec, /EVEN, /ODD, REDUCE_ALGORITHM=)
Description
 
  
   CHEBFIT fits a series of Chebyshev polynomials to a set of 
  
   tabulated and possibly noisy data points.  The functions MPFIT and
  
   CHEBEVAL, available from the above web page, must also be in your
  
   IDL path for this function to work properly.  The user can choose
      the desired precision and maximum number of chebyshev
      coefficients. 
  
   This function is intended for use on already-tabulated data which
      are potentially noisy.  The user should never expect more than
      NPOINTS terms, where NPOINTS is the number of (x,y) pairs.  For
      functions which can be evaluated to full machine precision at
  
   arbitrary abcissae, the routine CHEBCOEF should be used instead.
  
   For exact data tabulated on a regular grid, the routine CHEBGRID
      should be tried. 
  
   The user can also specify that the function is even or odd, using
      the keywords EVEN or ODD.  This saves computation time because
  
   certain terms in the expansion can be ignored.  For the purposes
      of this function even and odd refer to the symmetry about the
      center of the interval. 
  
   The algorithm is employed in three steps.  In the first step, the
  
   coefficients are estimated at a crude level.  In the second step,
      it is determined whether certain coefficients are deemed
      "ignoreable", i.e., they do not contribute significantly to the
      function and are discarded.  The operation of this step is
      determined by the REDUCE_ALGORITHM keyword.  Finally, the
      remaining "good" coefficients are re-fitted to achieve the best
      fit. Inputs
 
  
   X, Y - the x- and y- tabulated values to be fitted. 
  
   ERR - (optional) the y-error bar associated with each (x,y) pair.
                  Default: 1
Returns
 
  
   An array of Chebyshev coefficients which can be passed to 
  
   CHEBEVAL.  NOTE: the convention employed here is such that the 
  
   constant term in the expansion is P(0)*T0(x) (i.e., the convention
      of Luke), and not P(0)/2 * T0(x).
Keyword Parameters
 
  
   EVEN, ODD - if set, then the fitting routine assumes the function
              
               is even or odd, about the center of the interval. 
  
   INTERVAL - a 2-element vector describing the interval over which
              
              the polynomial is to be evaluated.
              
              Default: [-1, 1] 
  
   NMAX - a scalar, the maximum number of polynomial terms to be
                     fitted at one time.
                     Default: 16 
  
   PRECISION - a scalar, the requested precision in the fit.  Any
              
               terms which do not contribute significantly, as
              
               defined by this threshold, are discarded.  If the
              
               function to be fitted is not well-behaved, then the
              
               precision is not guaranteed to reach the desired
                              level.
              
               Default: 1E-7 
  
   REDUCE_ALGORITHM - a scalar integer, describes how insignificant
              
               terms are removed from the fit.  If 0, then all terms
              
               are kept, and none are dicarded.  If 1, then only
              
               trailing terms less than PRECISION are discarded.  If
              
               2, then both trailing and intermediate terms less than
              
               PRECISION are discarded.
              
               Default: 2 Example
 
  
   x = dindgen(1000)/100     ; Range of 0 to 10 
  
   y = cos(x) + randomn(seed,1000)*0.01  ; Function with some noise
      p = chebfit(x, y, interval=[0d,10d]) 
  
   plot, x, y - chebeval(x,p, interval=[0d,10d])
References
 
  
   Abramowitz, M. & Stegun, I., 1965, *Handbook of Mathematical
    
     Functions*, 1965, U.S. Government Printing Office, Washington,
          D.C. (Applied Mathematical Series 55) 
  
   CERN, 1995, CERN Program Library, Function E407 
  
   Luke, Y. L., *The Special Functions and Their Approximations*,
          1969, Academic Press, New York
Modification History
  
   Written and documented, CM, June 2001 
  
   Copyright license terms changed, CM, 30 Dec 2001 
  
   Added usage message, CM, 20 Mar 2002 
  
   Slight docs change, CM, 25 Mar 2002