| [section:hermite Hermite Polynomials] |
| |
| [h4 Synopsis] |
| |
| `` |
| #include <boost/math/special_functions/hermite.hpp> |
| `` |
| |
| namespace boost{ namespace math{ |
| |
| template <class T> |
| ``__sf_result`` hermite(unsigned n, T x); |
| |
| template <class T, class ``__Policy``> |
| ``__sf_result`` hermite(unsigned n, T x, const ``__Policy``&); |
| |
| template <class T1, class T2, class T3> |
| ``__sf_result`` hermite_next(unsigned n, T1 x, T2 Hn, T3 Hnm1); |
| |
| }} // namespaces |
| |
| [h4 Description] |
| |
| The return type of these functions is computed using the __arg_pomotion_rules: |
| note than when there is a single template argument the result is the same type |
| as that argument or `double` if the template argument is an integer type. |
| |
| template <class T> |
| ``__sf_result`` hermite(unsigned n, T x); |
| |
| template <class T, class ``__Policy``> |
| ``__sf_result`` hermite(unsigned n, T x, const ``__Policy``&); |
| |
| Returns the value of the Hermite Polynomial of order /n/ at point /x/: |
| |
| [equation hermite_0] |
| |
| [optional_policy] |
| |
| The following graph illustrates the behaviour of the first few |
| Hermite Polynomials: |
| |
| [graph hermite] |
| |
| template <class T1, class T2, class T3> |
| ``__sf_result`` hermite_next(unsigned n, T1 x, T2 Hn, T3 Hnm1); |
| |
| Implements the three term recurrence relation for the Hermite |
| polynomials, this function can be used to create a sequence of |
| values evaluated at the same /x/, and for rising /n/. |
| |
| [equation hermite_1] |
| |
| For example we could produce a vector of the first 10 polynomial |
| values using: |
| |
| double x = 0.5; // Abscissa value |
| vector<double> v; |
| v.push_back(hermite(0, x)).push_back(hermite(1, x)); |
| for(unsigned l = 1; l < 10; ++l) |
| v.push_back(hermite_next(l, x, v[l], v[l-1])); |
| |
| Formally the arguments are: |
| |
| [variablelist |
| [[n][The degree /n/ of the last polynomial calculated.]] |
| [[x][The abscissa value]] |
| [[Hn][The value of the polynomial evaluated at degree /n/.]] |
| [[Hnm1][The value of the polynomial evaluated at degree /n-1/.]] |
| ] |
| |
| [h4 Accuracy] |
| |
| The following table shows peak errors (in units of epsilon) |
| for various domains of input arguments. |
| Note that only results for the widest floating point type on the system are |
| given as narrower types have __zero_error. |
| |
| [table Peak Errors In the Hermite Polynomial |
| [[Significand Size] [Platform and Compiler] [Errors in range |
| |
| 0 < l < 20] ] |
| [[53] [Win32, Visual C++ 8] [Peak=4.5 Mean=1.5] ] |
| [[64] [Red Hat Linux IA32, g++ 4.1] [Peak=6 Mean=2]] |
| [[64] [Red Hat Linux IA64, g++ 3.4.4] [Peak=6 Mean=2] ] |
| [[113] [HPUX IA64, aCC A.06.06] [Peak=6 Mean=4]] |
| ] |
| |
| Note that the worst errors occur when the degree increases, values greater than |
| ~120 are very unlikely to produce sensible results, especially in the associated |
| polynomial case when the order is also large. Further the relative errors |
| are likely to grow arbitrarily large when the function is very close to a root. |
| |
| [h4 Testing] |
| |
| A mixture of spot tests of values calculated using functions.wolfram.com, |
| and randomly generated test data are |
| used: the test data was computed using |
| [@http://shoup.net/ntl/doc/RR.txt NTL::RR] at 1000-bit precision. |
| |
| [h4 Implementation] |
| |
| These functions are implemented using the stable three term |
| recurrence relations. These relations guarentee low absolute error |
| but cannot guarentee low relative error near one of the roots of the |
| polynomials. |
| |
| [endsect][/section:beta_function The Beta Function] |
| [/ |
| Copyright 2006 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). |
| ] |
| |