#
# = Discrete Hankel Transforms
# This chapter describes functions for performing Discrete Hankel Transforms
# (DHTs).
#
# 1. {Definitions}[link:rdoc/dht_rdoc.html#1]
# 1. {Initialization}[link:rdoc/dht_rdoc.html#2]
# 1. {Methods}[link:rdoc/dht_rdoc.html#3]
#
# == {}[link:index.html"name="1] Definitions
# The discrete Hankel transform acts on a vector of sampled data, where the
# samples are assumed to have been taken at points related to the zeroes of a
# Bessel function of fixed order; compare this to the case of the discrete
# Fourier transform, where samples are taken at points related to the zeroes
# of the sine or cosine function.
#
# Specifically, let f(t) be a function on the unit interval. Then the finite
# \nu-Hankel transform of f(t) is defined to be the set of numbers g_m given by,
# so that, Suppose that f is band-limited in the sense that g_m=0 for m > M.
# Then we have the following fundamental sampling theorem. It is this discrete
# expression which defines the discrete Hankel transform. The kernel in the
# summation above defines the matrix of the \nu-Hankel transform of size M-1.
# The coefficients of this matrix, being dependent on \nu and M, must be
# precomputed and stored; the GSL::Dht object encapsulates this data.
# The constructor GSL::Dht.alloc returns a GSL::Dht object
# which must be properly initialized with GSL::Dht#init before
# it can be used to perform transforms on data sample vectors,
# for fixed \nu and M, using the GSL::Dht#apply method.
# The implementation allows a scaling of the fundamental
# interval, for convenience, so that one can assume the function is defined on
# the interval [0,X], rather than the unit interval.
#
# Notice that by assumption f(t) vanishes at the endpoints of the interval,
# consistent with the inversion formula and the sampling formula given above.
# Therefore, this transform corresponds to an orthogonal expansion in
# eigenfunctions of the Dirichlet problem for the Bessel differential equation.
#
#
# == {}[link:index.html"name="2] Initialization
#
# ---
# * GSL::Dht.alloc(size)
# * GSL::Dht.alloc(size, nu, xmax)
#
# These methods allocate a Discrete Hankel transform object GSL::Dht
# of size size.
# If three arguments are given, the object is initialized with the values of
# nu, xmax.
#
# ---
# * GSL::Dht#init(nu, xmax)
#
# This initializes the transform self for the given values of nu and xmax.
#
# == {}[link:index.html"name="3] Methods
# ---
# * GSL::Dht#apply(vin, vout)
# * GSL::Dht#apply(vin)
#
# This applies the transform self to the vector vin whose size is
# equal to the size of the transform.
#
# ---
# * GSL::Dht#x_sample(n)
#
# This method returns the value of the n'th sample point in the unit interval,
# (j_{nu,n+1}/j_{nu,M}) X. These are the points where the function f(t) is
# assumed to be sampled.
#
# ---
# * GSL::Dht#k_sample(n)
#
# This method returns the value of the n'th sample point in "k-space",
# j_{nu,n+1}/X.
#
# ---
# * GSL::Dht#size
#
# Returns the size of the sample arrays to be transformed
# ---
# * GSL::Dht#nu
#
# Returns the Bessel function order
# ---
# * GSL::Dht#xmax
#
# Returns the upper limit to the x-sampling domain
# ---
# * GSL::Dht#kmax
#
# Returns the upper limit to the k-sampling domain
#
# ---
# * GSL::Dht#j
#
# Returns an array of computed J_nu zeros, j_{nu,s} = j[s]
# as a GSL::Vector::View.
#
# ---
# * GSL::Dht#Jjj
#
# Returns an array of transform numerator, J_nu(j_i j_m / j_N)
# as a GSL::Vector::View.
#
# ---
# * GSL::Dht#J2
#
# Returns an array of transform numerator, J_nu(j_i j_m / j_N).
#
# ---
# * GSL::Dht#coef
# * GSL::Dht#coef(n, m)
#
# Return the (n,m)-th transform coefficient.
#
# {prev}[link:rdoc/sum_rdoc.html]
# {next}[link:rdoc/roots_rdoc.html]
#
# {Reference index}[link:rdoc/ref_rdoc.html]
# {top}[link:index.html]
#
#