#
# = Interpolation
# This chapter describes functions for performing interpolation.
# The library provides a variety of interpolation methods, including
# Cubic splines and Akima splines. The interpolation types are interchangeable,
# allowing different methods to be used without recompiling. Interpolations can
# be defined for both normal and periodic boundary conditions. Additional
# functions are available for computing derivatives and integrals of
# interpolating functions.
#
# 1. {Interpolation classes}[link:files/rdoc/interp_rdoc.html#1]
# 1. {Initializing interpolation objects}[link:files/rdoc/interp_rdoc.html#2]
# 1. {Index Look-up and Acceleration}[link:files/rdoc/interp_rdoc.html#3]
# 1. {Evaluation of Interpolating Functions}[link:files/rdoc/interp_rdoc.html#4]
# 1. {Higher level interface: GSL::Spline class}[link:files/rdoc/interp_rdoc.html#5]
# 1. {Class initialization}[link:files/rdoc/interp_rdoc.html#5.1]
# 1. {Evaluation}[link:files/rdoc/interp_rdoc.html#5.2]
# 1. {Finding and acceleration}[link:files/rdoc/interp_rdoc.html#5.3]
#
# == {}[link:index.html"name="1] Interpolation Classes
# * GSL
# * Interp (class)
# * Accel (class)
# * Spline (class)
#
# == {}[link:index.html"name="2] Initializing interpolation objects
#
# ---
# * GSL::Interp.alloc(T, n)
# * GSL::Interp.alloc(T, x, y)
# * GSL::Interp.alloc(x, y)
#
# These methods create an interpolation object of type T for n
# data-points.
#
# The library provides six types, which are specifiled by an identifier of a
# constant or a string:
#
# * Interp::LINEAR or "linear"
#
# Linear interpolation. This interpolation method does not require any additional memory.
# * Interp::POLYNOMIAL or "polynomial"
#
# Polynomial interpolation. This method should only be used for interpolating small numbers of points because polynomial interpolation introduces large oscillations, even for well-behaved datasets. The number of terms in the interpolating polynomial is equal to the number of points.
#
# * Interp::CSPLINE or "cspline"
#
# Cubic spline with natural boundary conditions.
# * Interp::CSPLINE_PERIODIC or "gsl_cspline_periodic" or "cspline_periodic"
#
# Cubic spline with periodic boundary conditions
# * Interp::AKIMA or "akima"
#
# Non-rounded Akima spline with natural boundary conditions. This method uses the non-rounded corner algorithm of Wodicka.
# * Interp::AKIMA_PERIODIC or "akima_periodic"
#
# Non-rounded Akima spline with periodic boundary conditions. This method uses the non-rounded corner algorithm of Wodicka.
#
# * ex: For cubic spline for 10 points,
# sp = Interp.alloc("cspline", 10)
#
# ---
# * GSL::Interp#init(xa, ya)
#
# This method initializes the interpolation object interp for the data
# (xa,ya) where xa and ya are vectors.
# The interpolation object (GSL::Interp) does not save the data
# vectors xa, ya and only stores the static state computed from the data.
# The xa vector is always assumed to be strictly ordered; the behavior
# for other arrangements is not defined.
#
#
# ---
# * GSL::Interp#name
#
# This returns the name of the interpolation type used by self.
#
#
#
# ---
# * GSL::Interp#min_size
#
# This returns the minimum number of points required by the interpolation
# type of self. For example, Akima spline interpolation requires
# a minimum of 5 points.
#
# == {}[link:index.html"name="3] Index Look-up and Acceleration
# ---
# * GSL::Interp.bsearch(xa, x, index_lo, index_hi)
#
# This returns the index i of the vector xa such that
# xa[i] <= x < x[i+1]. The index is searched for in the range
# [index_lo,index_hi].
#
#
# ---
# * GSL::Interp#accel
#
# In C level, the library requires a gsl_interp_accel object,
# but it is hidden in Ruby/GSL. It is automatically allocated
# when a GSL::Interp object is created, stored in it,
# and destroyed when the Interp object
# is cleaned by the Ruby GC.
# This method is used to access to the Interp::Accel object
# stored in self.
#
# ---
# * GSL::Interp#find(xa, x)
# * GSL::Interp#accel_find(xa, x)
# * GSL::Interp::Accel#find(xa, x)
#
# This method performs a lookup action on the data array xa.
# This is how lookups are performed during evaluation
# of an interpolation. The function returns an index i such that
# xa[i] <= x < xa[i+1].
#
#
# == {}[link:index.html"name="4] Evaluation of Interpolating Functions
#
# ---
# * GSL::Interp#eval(xa, ya, x)
# * GSL::Interp#eval_e(xa, ya, x)
#
# These methods return the interpolated value for a given point x,
# using the interpolation object self, data vectors xa and ya.
# The data x can be a Numeric, Vector, Matrix or an NArray.
# ---
# * GSL::Interp#eval_deriv(xa, ya, x)
# * GSL::Interp#eval_deriv_e(xa, ya, x)
#
# These methods return the derivative of an interpolated function for a
# given point x, using the interpolation object self,
# data vectors xa and ya.
#
# ---
# * GSL::Interp#eval_deriv2(xa, ya, x)
# * GSL::Interp#eval_deriv2_e(xa, ya, x)
#
# These methods return the second derivative of an interpolated function
# for a given point x, using the interpolation object self,
# data vectors xa and ya.
#
# ---
# * GSL::Interp#eval_integ(xa, ya, a, b)
# * GSL::Interp#eval_integ_e(xa, ya, a, b)
#
# These methods return the numerical integral result of an interpolated
# function over the range [a, b], using the interpolation object self,
# data vectors xa and ya.
#
# == {}[link:index.html"name="5] Higher level interface: GSL::Spline class
# === {}[link:index.html"name="5.1] Class initialization
#
# ---
# * GSL::Spline.alloc(T, n)
# * GSL::Spline.alloc(T, x, y)
# * GSL::Spline.alloc(x, y, T)
#
# This creates a GSL::Spline object of type T for n
# data-points. The type T is the same as GSL::Interp class.
#
# These two are equivalent.
# * GSL::Spline.alloc and GSL::Spline#init
# sp = GSL::Spline.alloc(T, n)
# sp.init(x, y) # x and y are vectors of length n
# * GSL::Spline.alloc with two vectors
# sp = GSL::Spline.alloc(T, x, y)
# If T is not given, "cspline" is used.
#
# ---
# * GSL::Spline#init(xa, ya)
#
# This initializes a GSL::Spline object self for the data
# (xa, ya) where xa and ya are Ruby arrays of equal sizes
# or GSL::Vector.
#
# ---
# * GSL::Spline#name
#
# This returns the name of the spline type used by self.
#
# === {}[link:index.html"name="5.2] Evaluation
# ---
# * GSL::Spline#eval(x)
#
# This returns the interpolated value for a given point x.
# The data x can be a Numeric, Vector, Matrix or an NArray.
#
# NOTE: In a GSL-C program, a gsl_interp_accel object is required to use
# the function gsl_spline_eval.
# In Ruby/GSL, the gsl_interp_accel is hidden, it is automatically
# allocated when a GSL::Spline object is created,
# and also destroyed when the Spline object
# is cleaned by the Ruby GC. The accel object can be accessed via the method
# GSL::Spline#accel.
#
# ---
# * GSL::Spline#eval_deriv(x)
#
# This returns the derivative of an interpolated function for a given point x, usingthe data arrays xa and ya set by init.
#
# ---
# * GSL::Spline#eval_deriv2(x)
#
# This returns the second derivative at x.
#
# ---
# * GSL::Spline#eval_integ(a, b)
#
# Returns the numerical integral over the range [a, b].
#
# === {}[link:index.html"name="5.3] Finding and acceleration
# ---
# * GSL::Spline#find(xa, x)
# * GSL::Spline#accel_find(xa, x)
#
# This method performs a lookup action on the data array xa.
# This is how lookups are performed during evaluation
# of an interpolation. The function returns an index i such that
# xa[i] <= x < xa[i+1].
#
# See also the GSL manual and the examples in examples/
#
# {prev}[link:files/rdoc/odeiv_rdoc.html]
# {next}[link:files/rdoc/diff_rdoc.html]
#
# {Reference index}[link:files/rdoc/ref_rdoc.html]
# {top}[link:files/rdoc/index_rdoc.html]
#
#
#