@cindex transport functions

The transport functions @math{J(n,x)} are defined by the integral 
representations
@c{$J(n,x) := \int_0^x dt \, t^n e^t /(e^t - 1)^2$}
@math{J(n,x) := \int_0^x dt t^n e^t /(e^t - 1)^2}.
They are declared in the header file @file{gsl_sf_transport.h}.

@deftypefun double gsl_sf_transport_2 (double @var{x})
@deftypefunx int gsl_sf_transport_2_e (double @var{x}, gsl_sf_result * @var{result})
These routines compute the transport function @math{J(2,x)}.
@comment Exceptional Return Values: GSL_EDOM
@end deftypefun


@deftypefun double gsl_sf_transport_3 (double @var{x})
@deftypefunx int gsl_sf_transport_3_e (double @var{x}, gsl_sf_result * @var{result})
These routines compute the transport function @math{J(3,x)}.
@comment Exceptional Return Values: GSL_EDOM, GSL_EUNDRFLW
@end deftypefun


@deftypefun double gsl_sf_transport_4 (double @var{x})
@deftypefunx int gsl_sf_transport_4_e (double @var{x}, gsl_sf_result * @var{result})
These routines compute the transport function @math{J(4,x)}.
@comment Exceptional Return Values: GSL_EDOM, GSL_EUNDRFLW
@end deftypefun


@deftypefun double gsl_sf_transport_5 (double @var{x})
@deftypefunx int gsl_sf_transport_5_e (double @var{x}, gsl_sf_result * @var{result})
These routines compute the transport function @math{J(5,x)}.
@comment Exceptional Return Values: GSL_EDOM, GSL_EUNDRFLW
@end deftypefun
