summaryrefslogtreecommitdiff
path: root/gsl-1.9/doc/dht.texi
diff options
context:
space:
mode:
Diffstat (limited to 'gsl-1.9/doc/dht.texi')
-rw-r--r--gsl-1.9/doc/dht.texi152
1 files changed, 152 insertions, 0 deletions
diff --git a/gsl-1.9/doc/dht.texi b/gsl-1.9/doc/dht.texi
new file mode 100644
index 0000000..7f9f25f
--- /dev/null
+++ b/gsl-1.9/doc/dht.texi
@@ -0,0 +1,152 @@
+@cindex discrete Hankel transforms
+@cindex Hankel transforms, discrete
+@cindex transforms, Hankel
+This chapter describes functions for performing Discrete Hankel
+Transforms (DHTs). The functions are declared in the header file
+@file{gsl_dht.h}.
+
+@menu
+* Discrete Hankel Transform Definition::
+* Discrete Hankel Transform Functions::
+* Discrete Hankel Transform References::
+@end menu
+
+@node Discrete Hankel Transform Definition
+@section 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 @math{f(t)} be a function on the unit interval.
+Then the finite @math{\nu}-Hankel transform of @math{f(t)} is defined
+to be the set of numbers @math{g_m} given by,
+@tex
+\beforedisplay
+$$
+g_m = \int_0^1 t dt\, J_\nu(j_{\nu,m}t) f(t),
+$$
+\afterdisplay
+@end tex
+@ifinfo
+@example
+g_m = \int_0^1 t dt J_\nu(j_(\nu,m)t) f(t),
+@end example
+
+@end ifinfo
+@noindent
+so that,
+@tex
+\beforedisplay
+$$
+f(t) = \sum_{m=1}^\infty {{2 J_\nu(j_{\nu,m}x)}\over{J_{\nu+1}(j_{\nu,m})^2}} g_m.
+$$
+\afterdisplay
+@end tex
+@ifinfo
+@example
+f(t) = \sum_@{m=1@}^\infty (2 J_\nu(j_(\nu,m)x) / J_(\nu+1)(j_(\nu,m))^2) g_m.
+@end example
+
+@end ifinfo
+@noindent
+Suppose that @math{f} is band-limited in the sense that
+@math{g_m=0} for @math{m > M}. Then we have the following
+fundamental sampling theorem.
+@tex
+\beforedisplay
+$$
+g_m = {{2}\over{j_{\nu,M}^2}}
+ \sum_{k=1}^{M-1} f\left({{j_{\nu,k}}\over{j_{\nu,M}}}\right)
+ {{J_\nu(j_{\nu,m} j_{\nu,k} / j_{\nu,M})}\over{J_{\nu+1}(j_{\nu,k})^2}}.
+$$
+\afterdisplay
+@end tex
+@ifinfo
+@example
+g_m = (2 / j_(\nu,M)^2)
+ \sum_@{k=1@}^@{M-1@} f(j_(\nu,k)/j_(\nu,M))
+ (J_\nu(j_(\nu,m) j_(\nu,k) / j_(\nu,M)) / J_(\nu+1)(j_(\nu,k))^2).
+@end example
+
+@end ifinfo
+@noindent
+It is this discrete expression which defines the discrete Hankel
+transform. The kernel in the summation above defines the matrix of the
+@math{\nu}-Hankel transform of size @math{M-1}. The coefficients of
+this matrix, being dependent on @math{\nu} and @math{M}, must be
+precomputed and stored; the @code{gsl_dht} object encapsulates this
+data. The allocation function @code{gsl_dht_alloc} returns a
+@code{gsl_dht} object which must be properly initialized with
+@code{gsl_dht_init} before it can be used to perform transforms on data
+sample vectors, for fixed @math{\nu} and @math{M}, using the
+@code{gsl_dht_apply} function. The implementation allows a scaling of
+the fundamental interval, for convenience, so that one can assume the
+function is defined on the interval @math{[0,X]}, rather than the unit
+interval.
+
+Notice that by assumption @math{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.
+
+
+@node Discrete Hankel Transform Functions
+@section Functions
+
+@deftypefun {gsl_dht *} gsl_dht_alloc (size_t @var{size})
+This function allocates a Discrete Hankel transform object of size
+@var{size}.
+@end deftypefun
+
+@deftypefun int gsl_dht_init (gsl_dht * @var{t}, double @var{nu}, double @var{xmax})
+This function initializes the transform @var{t} for the given values of
+@var{nu} and @var{x}.
+@end deftypefun
+
+@deftypefun {gsl_dht *} gsl_dht_new (size_t @var{size}, double @var{nu}, double @var{xmax})
+This function allocates a Discrete Hankel transform object of size
+@var{size} and initializes it for the given values of @var{nu} and
+@var{x}.
+@end deftypefun
+
+@deftypefun void gsl_dht_free (gsl_dht * @var{t})
+This function frees the transform @var{t}.
+@end deftypefun
+
+@deftypefun int gsl_dht_apply (const gsl_dht * @var{t}, double * @var{f_in}, double * @var{f_out})
+This function applies the transform @var{t} to the array @var{f_in}
+whose size is equal to the size of the transform. The result is stored
+in the array @var{f_out} which must be of the same length.
+@end deftypefun
+
+@deftypefun double gsl_dht_x_sample (const gsl_dht * @var{t}, int @var{n})
+This function returns the value of the @var{n}-th sample point in the unit interval,
+@c{${({j_{\nu,n+1}} / {j_{\nu,M}}}) X$}
+@math{(j_@{\nu,n+1@}/j_@{\nu,M@}) X}. These are the
+points where the function @math{f(t)} is assumed to be sampled.
+@end deftypefun
+
+@deftypefun double gsl_dht_k_sample (const gsl_dht * @var{t}, int @var{n})
+This function returns the value of the @var{n}-th sample point in ``k-space'',
+@c{${{j_{\nu,n+1}} / X}$}
+@math{j_@{\nu,n+1@}/X}.
+@end deftypefun
+
+@node Discrete Hankel Transform References
+@section References and Further Reading
+
+The algorithms used by these functions are described in the following papers,
+
+@itemize @asis
+@item
+H. Fisk Johnson, Comp.@: Phys.@: Comm.@: 43, 181 (1987).
+@end itemize
+
+@itemize @asis
+@item
+D. Lemoine, J. Chem.@: Phys.@: 101, 3936 (1994).
+@end itemize