]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/math/doc/sf/laguerre.qbk
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / math / doc / sf / laguerre.qbk
CommitLineData
7c673cae
FG
1[section:laguerre Laguerre (and Associated) Polynomials]
2
3[h4 Synopsis]
4
5``
6#include <boost/math/special_functions/laguerre.hpp>
7``
8
9 namespace boost{ namespace math{
10
11 template <class T>
12 ``__sf_result`` laguerre(unsigned n, T x);
13
14 template <class T, class ``__Policy``>
15 ``__sf_result`` laguerre(unsigned n, T x, const ``__Policy``&);
16
17 template <class T>
18 ``__sf_result`` laguerre(unsigned n, unsigned m, T x);
19
20 template <class T, class ``__Policy``>
21 ``__sf_result`` laguerre(unsigned n, unsigned m, T x, const ``__Policy``&);
22
23 template <class T1, class T2, class T3>
24 ``__sf_result`` laguerre_next(unsigned n, T1 x, T2 Ln, T3 Lnm1);
25
26 template <class T1, class T2, class T3>
27 ``__sf_result`` laguerre_next(unsigned n, unsigned m, T1 x, T2 Ln, T3 Lnm1);
28
29
30 }} // namespaces
31
32[h4 Description]
33
34The return type of these functions is computed using the __arg_promotion_rules:
35note than when there is a single template argument the result is the same type
36as that argument or `double` if the template argument is an integer type.
37
38[optional_policy]
39
40 template <class T>
41 ``__sf_result`` laguerre(unsigned n, T x);
42
43 template <class T, class ``__Policy``>
44 ``__sf_result`` laguerre(unsigned n, T x, const ``__Policy``&);
45
46Returns the value of the Laguerre Polynomial of order /n/ at point /x/:
47
48[equation laguerre_0]
49
50The following graph illustrates the behaviour of the first few
51Laguerre Polynomials:
52
53[graph laguerre]
54
55 template <class T>
56 ``__sf_result`` laguerre(unsigned n, unsigned m, T x);
57
58 template <class T, class ``__Policy``>
59 ``__sf_result`` laguerre(unsigned n, unsigned m, T x, const ``__Policy``&);
60
61Returns the Associated Laguerre polynomial of degree /n/
62and order /m/ at point /x/:
63
64[equation laguerre_1]
65
66 template <class T1, class T2, class T3>
67 ``__sf_result`` laguerre_next(unsigned n, T1 x, T2 Ln, T3 Lnm1);
68
69Implements the three term recurrence relation for the Laguerre
70polynomials, this function can be used to create a sequence of
71values evaluated at the same /x/, and for rising /n/.
72
73[equation laguerre_2]
74
75For example we could produce a vector of the first 10 polynomial
76values using:
77
78 double x = 0.5; // Abscissa value
79 vector<double> v;
80 v.push_back(laguerre(0, x)).push_back(laguerre(1, x));
81 for(unsigned l = 1; l < 10; ++l)
82 v.push_back(laguerre_next(l, x, v[l], v[l-1]));
83
84Formally the arguments are:
85
86[variablelist
87[[n][The degree /n/ of the last polynomial calculated.]]
88[[x][The abscissa value]]
89[[Ln][The value of the polynomial evaluated at degree /n/.]]
90[[Lnm1][The value of the polynomial evaluated at degree /n-1/.]]
91]
92
93 template <class T1, class T2, class T3>
94 ``__sf_result`` laguerre_next(unsigned n, unsigned m, T1 x, T2 Ln, T3 Lnm1);
95
96Implements the three term recurrence relation for the Associated Laguerre
97polynomials, this function can be used to create a sequence of
98values evaluated at the same /x/, and for rising degree /n/.
99
100[equation laguerre_3]
101
102For example we could produce a vector of the first 10 polynomial
103values using:
104
105 double x = 0.5; // Abscissa value
106 int m = 10; // order
107 vector<double> v;
108 v.push_back(laguerre(0, m, x)).push_back(laguerre(1, m, x));
109 for(unsigned l = 1; l < 10; ++l)
110 v.push_back(laguerre_next(l, m, x, v[l], v[l-1]));
111
112Formally the arguments are:
113
114[variablelist
115[[n][The degree of the last polynomial calculated.]]
116[[m][The order of the Associated Polynomial.]]
117[[x][The abscissa value.]]
118[[Ln][The value of the polynomial evaluated at degree /n/.]]
119[[Lnm1][The value of the polynomial evaluated at degree /n-1/.]]
120]
121
122[h4 Accuracy]
123
124The following table shows peak errors (in units of epsilon)
125for various domains of input arguments.
126Note that only results for the widest floating point type on the system are
127given as narrower types have __zero_error.
128
129[table_laguerre_n_x_]
130
131[table_laguerre_n_m_x_]
132
133Note that the worst errors occur when the degree increases, values greater than
134~120 are very unlikely to produce sensible results, especially in the associated
135polynomial case when the order is also large. Further the relative errors
136are likely to grow arbitrarily large when the function is very close to a root.
137
138[h4 Testing]
139
140A mixture of spot tests of values calculated using functions.wolfram.com,
141and randomly generated test data are
142used: the test data was computed using
143[@http://shoup.net/ntl/doc/RR.txt NTL::RR] at 1000-bit precision.
144
145[h4 Implementation]
146
147These functions are implemented using the stable three term
148recurrence relations. These relations guarantee low absolute error
149but cannot guarantee low relative error near one of the roots of the
150polynomials.
151
152[endsect][/section:beta_function The Beta Function]
153[/
154 Copyright 2006 John Maddock and Paul A. Bristow.
155 Distributed under the Boost Software License, Version 1.0.
156 (See accompanying file LICENSE_1_0.txt or copy at
157 http://www.boost.org/LICENSE_1_0.txt).
158]
159