Chebyshev Polynomials
=====================

The Chebyshev polynomials $T_n(x) = \cos(n \arccos x)$ T_n(x) = \cos(n \arccos x) provide an orthogonal basis of polynomials on the interval [-1,1], with the weight function $1 \over \sqrt1-x^2$ 1 \over \sqrt{1-x^2}. The first few such polynomials are

      T_0(x) = 1,
      T_1(x) = x,
      T_2(x) = 2 x^2 - 1.

The gsl_sf_cheb_series struct
-----------------------------

     typedef struct
     {
       double * c;   /* coefficients                */
       int order;    /* order of expansion          */
       double a;     /* lower interval point        */
       double b;     /* upper interval point        */
       double * cp;  /* coefficients of derivative  */
       double * ci;  /* coefficients of integral    */

       /* The following exists (mostly) for the benefit
        * of the implementation. It is an effective single
        * precision order, for use in single precision
        * evaluation. Users can use it if they like, but
        * only they know how to calculate it, since it is
        * specific to the approximated function. By default,
        * order_sp = order.
        * It is used explicitly only by the gsl_sf_cheb_eval_mode
        * functions, which are not meant for casual use.

       int order_sp;
     } gsl_sf_cheb_struct

Creation/Calculation of Chebyshev Series
----------------------------------------

 -- Function: gsl_sf_cheb_series * gsl_sf_cheb_new (double (*func)(double),
     double a, double b, int order) Calculate a Chebyshev series of specified order over a specified interval, for a given function. Return 0 on failure.

 -- Function: int gsl_sf_cheb_calc_impl (gsl_sf_cheb_series * cs, double (*func)(double))
 -- Function: int gsl_sf_cheb_calc_e (gsl_sf_cheb_series * cs, double (*func)(double))
     Calculate a Chebyshev series, but do not allocate a new cheb_series struct. Instead use the one provided. Uses the interval (a,b) and the order with which it was initially created; if you want to change these, then use gsl_sf_cheb_new() instead. Exceptional Return Values: GSL_EFAULT, GSL_ENOMEM

Chebyshev Series Evaluation
---------------------------

 -- Function: int gsl_sf_cheb_eval_impl (const gsl_sf_cheb_series * cs, double x, gsl_sf_result * result)
 -- Function: int gsl_sf_cheb_eval_e (const gsl_sf_cheb_series * cs, double x, gsl_sf_result * result)
     Evaluate a Chebyshev series at a given point. No errors can occur for a struct obtained from gsl_sf_cheb_new().

 -- Function: int gsl_sf_cheb_eval_n_impl (const gsl_sf_cheb_series * cs, int order, double x, gsl_sf_result * result)
 -- Function: int gsl_sf_cheb_eval_n_e (const gsl_sf_cheb_series * cs, int order, double x, gsl_sf_result * result)
     Evaluate a Chebyshev series at a given point, to (at most) the given order. No errors can occur for a struct obtained from gsl_sf_cheb_new().

 -- Function: int gsl_sf_cheb_eval_mode_impl (const gsl_sf_cheb_series * cs, double x, gsl_mode_t mode, gsl_sf_result * result)
 -- Function: int gsl_sf_cheb_eval_mode_e (const gsl_sf_cheb_series * cs, double x, gsl_mode_t mode, gsl_sf_result * result)
     Evaluate a Chebyshev series at a given point, using the default order for double precision mode(s) and the single precision order for other modes. No errors can occur for a struct obtained from gsl_sf_cheb_new().

 -- Function: int gsl_sf_cheb_eval_deriv_impl (gsl_sf_cheb_series * cs, double x, gsl_sf_result * result)
 -- Function: int gsl_sf_cheb_eval_deriv_e (gsl_sf_cheb_series * cs, double x, gsl_sf_result * result)
     Evaluate derivative of a Chebyshev series at a given point.

 -- Function: int gsl_sf_cheb_eval_integ_impl (gsl_sf_cheb_series * cs, double x, gsl_sf_result * result)
 -- Function: int gsl_sf_cheb_eval_integ_e (gsl_sf_cheb_series * cs, double x, gsl_sf_result * result)
     Evaluate integal of a Chebyshev series at a given point. The integral is fixed by the condition that it equals zero at the left end-point, i.e. it is precisely \int_a^x dt cs(t; a,b) .

Delete a Chebyshev Expansion
----------------------------

 -- Function: void gsl_sf_cheb_free (gsl_sf_cheb_series * cs)
     Free a Chebyshev series previously calculated with gsl_sf_cheb_new(). No error can occur.