123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- [section:polygamma Polygamma]
- [h4 Synopsis]
- ``
- #include <boost/math/special_functions/polygamma.hpp>
- ``
- namespace boost{ namespace math{
-
- template <class T>
- ``__sf_result`` polygamma(int n, T z);
-
- template <class T, class ``__Policy``>
- ``__sf_result`` polygamma(int n, T z, const ``__Policy``&);
-
- }} // namespaces
-
- [h4 Description]
- Returns the polygamma function of /x/. Polygamma is defined as the n'th
- derivative of the digamma function:
- [equation polygamma1]
- The following graphs illustrate the behaviour of the function for odd and even order:
- [graph polygamma2]
- [graph polygamma3]
- [optional_policy]
- The return type of this function is computed using the __arg_promotion_rules:
- the result is of type `double` when T is an integer type, and type T otherwise.
- [h4 Accuracy]
- The following table shows the peak errors (in units of epsilon)
- found on various platforms with various floating point types.
- Unless otherwise specified any floating point type that is narrower
- than the one shown will have __zero_error.
- [table_polygamma]
- As shown above, error rates are generally very acceptable for moderately sized
- arguments. Error rates should stay low for exact inputs, however, please note that the
- function becomes exceptionally sensitive to small changes in input for large n and negative x,
- indeed for cases where ['n!] would overflow, the function changes directly from -[infin] to
- +[infin] somewhere between each negative integer - ['these cases are not handled correctly].
- [*For these reasons results should be treated with extreme caution when /n/ is large and x negative].
- [h4 Testing]
- Testing is against Mathematica generated spot values to 35 digit precision.
- [h4 Implementation]
- For x < 0 the following reflection formula is used:
- [equation polygamma2]
- The n'th derivative of ['cot(x)] is tabulated for small /n/, and for larger n
- has the general form:
- [equation polygamma3]
- The coefficients of the cosine terms can be calculated iteratively starting
- from ['C[sub 1,0] = -1] and then using
- [equation polygamma7]
- to generate coefficients for n+1.
- Note that every other coefficient is zero, and therefore what we have are
- even or odd polynomials depending on whether n is even or odd.
- Once x is positive then we have two methods available to us, for small x
- we use the series expansion:
- [equation polygamma4]
- Note that the evaluation of zeta functions at integer values is essentially a table lookup
- as __zeta is optimized for those cases.
- For large x we use the asymptotic expansion:
- [equation polygamma5]
- For x in-between the two extremes we use the relation:
- [equation polygamma6]
- to make x large enough for the asymptotic expansion to be used.
- There are also two special cases:
- [equation polygamma8]
- [equation polygamma9]
- [endsect] [/section:polygamma The Polygamma Function]
- [/
- Copyright 2014 John Maddock and Paul A. Bristow.
- Distributed under the Boost Software License, Version 1.0.
- (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt).
- ]
|