#
# = 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]
#
# == Cheb 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 f over the range (a,b) to the previously specified order. Where f is a {GSL::Function}[link:rdoc/function_rdoc.html] object. The computation of the Chebyshev approximation is an O(n^2) process, and requires n 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 x.
#
# ---
# * GSL::Cheb#eval_n(n, x)
#
# This evaluates the Chebyshev series at a given point x, to (at most) the given order n.
#
# == 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 examples/cheb/.
#
# {prev}[link:rdoc/diff_rdoc.html]
# {next}[link:rdoc/sum_rdoc.html]
#
# {Reference index}[link:rdoc/ref_rdoc.html]
# {top}[link:index.html]
#