@cindex Gegenbauer functions

The Gegenbauer polynomials are defined in Abramowitz & Stegun, Chapter
22, where they are known as Ultraspherical polynomials.  The functions
described in this section are declared in the header file
@file{gsl_sf_gegenbauer.h}.

@deftypefun double gsl_sf_gegenpoly_1 (double @var{lambda}, double @var{x})
@deftypefunx double gsl_sf_gegenpoly_2 (double @var{lambda}, double @var{x})
@deftypefunx double gsl_sf_gegenpoly_3 (double @var{lambda}, double @var{x})
@deftypefunx int gsl_sf_gegenpoly_1_e (double @var{lambda}, double @var{x}, gsl_sf_result * @var{result})
@deftypefunx int gsl_sf_gegenpoly_2_e (double @var{lambda}, double @var{x}, gsl_sf_result * @var{result})
@deftypefunx int gsl_sf_gegenpoly_3_e (double @var{lambda}, double @var{x}, gsl_sf_result * @var{result})
These functions evaluate the Gegenbauer polynomials
@c{$C^{(\lambda)}_n(x)$} 
@math{C^@{(\lambda)@}_n(x)} using explicit
representations for @math{n =1, 2, 3}.
@comment Exceptional Return Values: none
@end deftypefun


@deftypefun double gsl_sf_gegenpoly_n (int @var{n}, double @var{lambda}, double @var{x})
@deftypefunx int gsl_sf_gegenpoly_n_e (int @var{n}, double @var{lambda}, double @var{x}, gsl_sf_result * @var{result})
These functions evaluate the Gegenbauer polynomial @c{$C^{(\lambda)}_n(x)$} 
@math{C^@{(\lambda)@}_n(x)} for a specific value of @var{n},
@var{lambda}, @var{x} subject to @math{\lambda > -1/2}, @c{$n \ge 0$}
@math{n >= 0}.
@comment Domain: lambda > -1/2, n >= 0
@comment Exceptional Return Values: GSL_EDOM
@end deftypefun


@deftypefun int gsl_sf_gegenpoly_array (int @var{nmax}, double @var{lambda}, double @var{x}, double @var{result_array}[])
This function computes an array of Gegenbauer polynomials
@c{$C^{(\lambda)}_n(x)$} 
@math{C^@{(\lambda)@}_n(x)} for @math{n = 0, 1, 2, \dots, nmax}, subject
to @math{\lambda > -1/2}, @c{$nmax \ge 0$}
@math{nmax >= 0}.
@comment Conditions: n = 0, 1, 2, ... nmax
@comment Domain: lambda > -1/2, nmax >= 0
@comment Exceptional Return Values: GSL_EDOM
@end deftypefun
