#
# = Chebyshev Approximations
# This chapter describes routines for computing Chebyshev approximations to
# univariate functions. A Chebyshev approximation is a truncation of the series
# f(x) = \sum c_n T_n(x),
# where the Chebyshev polynomials T_n(x) = \cos(n \arccos x)
# provide an orthogonal basis of polynomials on the interval [-1,1]
# with the weight function 1 / \sqrt{1-x^2}.
# The first few Chebyshev polynomials are,
# T_0(x) = 1, T_1(x) = x, T_2(x) = 2 x^2 - 1.
# For further information see Abramowitz & Stegun, Chapter 22.
#
# 1. {GSL::Cheb class}[link:rdoc/cheb_rdoc.html#label-Cheb+class]
# 1. {Chebyshev Series Evaluation}[link:rdoc/cheb_rdoc.html#label-Chebyshev+Series+Evaluation]
# 1. {Derivatives and Integrals}[link:rdoc/cheb_rdoc.html#label-Derivatives+and+Integrals]
# 1. {Examples}[link:rdoc/cheb_rdoc.html#label-Example]
#
# == <tt>Cheb</tt> class
#
# ---
# * GSL::Cheb.alloc(n)
#
#   This create an instance of the GSL::Cheb class for a Chebyshev series of order n.
#
#
# ---
# * GSL::Cheb#init(f, a, b)
#
#   This computes the Chebyshev approximation the function <tt>f</tt> over the range (<tt>a,b</tt>) to the previously specified order. Where <tt>f</tt> is a {GSL::Function}[link:rdoc/function_rdoc.html] object. The computation of the Chebyshev approximation is an O(n^2) process, and requires <tt>n</tt> function evaluations.
#
#   * ex: Approximate a step function defined in (0, 1) by a Chebyshev series of order 40.
#       f = GSL::Function.alloc { |x|
#         if x < 0.5
#           0.25
#         else
#           0.75
#         end
#       }
#
#       cs = GSL::Cheb.alloc(40)
#       cs.init(f, 0, 1)
#
# == Chebyshev Series Evaluation
# ---
# * GSL::Cheb#eval(x)
#
#   This evaluates the Chebyshev series at a given point <tt>x</tt>.
#
# ---
# * GSL::Cheb#eval_n(n, x)
#
#   This evaluates the Chebyshev series at a given point <tt>x</tt>, to (at most) the given order <tt>n</tt>.
#
# == Derivatives and Integrals
#
# ---
# * GSL::Cheb#calc_deriv()
# * GSL::Cheb#deriv()
#
#   This computes the derivative of the series, and returns a new GSL::Cheb object which contains the computed derivative. The reciever is not changed.
#
# ---
# * GSL::Cheb#calc_integ()
# * GSL::Cheb#integ()
#
#   This computes the integral of the series, and returns a new GSL::Cheb object which contains the computed integral coefficients. The reciever is not changed.
#
# == Example
#    #!/usr/bin/env ruby
#    require("gsl")
#
#    f = GSL::Function.alloc { |x|
#      if x < 0.5
#        0.25
#      else
#        0.75
#      end
#    }
#
#    n = 1000
#    order = 40
#    cs = GSL::Cheb.alloc(order)
#    cs.init(f, 0, 1)
#
#    x = Vector.linspace(0, 1, n)
#    ff = f.eval(x)
#    r10 = cs.eval_n(10, x)
#    r40 = cs.eval(x)
#    GSL::graph(x, ff, r10, r40)
#
#
# See also the example scripts in <tt>examples/cheb/</tt>.
#
# {prev}[link:rdoc/diff_rdoc.html]
# {next}[link:rdoc/sum_rdoc.html]
#
# {Reference index}[link:rdoc/ref_rdoc.html]
# {top}[link:index.html]
#
