Difference between revisions of "cpp/numeric/special functions/laguerre"
m (Text replace - "Integral (x|n|from)" to "IntegralType $1") |
m (→Notes: turned the list into a table) |
||
(10 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
{{cpp/title|laguerre|laguerref|laguerrel}} | {{cpp/title|laguerre|laguerref|laguerrel}} | ||
− | {{cpp/numeric/ | + | {{cpp/numeric/special_functions/navbar}} |
{{dcl begin}} | {{dcl begin}} | ||
− | {{dcl |num=1| | + | {{dcl header|cmath}} |
− | + | {{dcl rev multi|num=1|since1=c++17|dcl1= | |
− | double laguerre( unsigned int n, | + | float laguerre ( unsigned int n, float x ); |
− | double | + | double laguerre ( unsigned int n, double x ); |
+ | long double laguerre ( unsigned int n, long double x ); | ||
+ | |since2=c++23|dcl2= | ||
+ | /* floating-point-type */ laguerre( unsigned int n, | ||
+ | /* floating-point-type */ x ); | ||
+ | }} | ||
+ | {{dcl|num=2|since=c++17| | ||
float laguerref( unsigned int n, float x ); | float laguerref( unsigned int n, float x ); | ||
+ | }} | ||
+ | {{dcl|num=3|since=c++17| | ||
long double laguerrel( unsigned int n, long double x ); | long double laguerrel( unsigned int n, long double x ); | ||
}} | }} | ||
− | {{dcl |num= | + | {{dcl h|[[#Notes|Additional overloads]]}} |
− | double laguerre( unsigned int n, | + | {{dcl header|cmath}} |
+ | {{dcl|num=A|since=c++17| | ||
+ | template< class Integer > | ||
+ | double laguerre ( unsigned int n, Integer x ); | ||
}} | }} | ||
{{dcl end}} | {{dcl end}} | ||
− | @1@ Computes the non-associated | + | @1-3@ Computes the non-associated {{enwiki|Laguerre polynomials}} of the degree {{c|n}} and argument {{c|x}}.{{rev inl|since=c++23| The library provides overloads of {{tt|std::laguerre}} for all cv-unqualified floating-point types as the type of the parameter {{c|x}}.}} |
− | + | @A@ Additional overloads are provided for all integer types, which are treated as {{c/core|double}}. | |
===Parameters=== | ===Parameters=== | ||
{{par begin}} | {{par begin}} | ||
− | {{par | n | the degree of the | + | {{par|n|the degree of the polynomial, an unsigned integer value}} |
− | {{par | x | the argument, | + | {{par|x|the argument, a floating-point or integer value}} |
{{par end}} | {{par end}} | ||
===Return value=== | ===Return value=== | ||
− | If no errors occur, value of the nonassociated Laguerre polynomial of {{ | + | If no errors occur, value of the nonassociated Laguerre polynomial of {{c|x}}, that is {{math|{{mfrac|{{mexp|x}}|n!}}{{mfrac|d{{su|p=n}}|dx{{su|p=n}}}}(x{{su|p=n}}{{mexp|-x}})}}, is returned. |
===Error handling=== | ===Error handling=== | ||
− | Errors may be reported as specified in | + | Errors may be reported as specified in {{lc|math_errhandling}} |
− | + | ||
* If the argument is NaN, NaN is returned and domain error is not reported | * If the argument is NaN, NaN is returned and domain error is not reported | ||
− | * If {{ | + | * If {{c|x}} is negative, a domain error may occur |
− | * If {{ | + | * If {{c|n}} is greater or equal than 128, the behavior is implementation-defined |
===Notes=== | ===Notes=== | ||
− | {{cpp/numeric/ | + | {{cpp/numeric/special functions/older impl note}} |
− | An implementation of this function is also [ | + | An implementation of this function is also [https://www.boost.org/doc/libs/release/libs/math/doc/html/math_toolkit/sf_poly/laguerre.html available in boost.math]. |
− | The Laguerre polynomials are the polynomial solutions of the equation {{math|xy{{su|p=,,}}+(1-x)y{{su|p=,}}+ny | + | The Laguerre polynomials are the polynomial solutions of the equation {{math|xy{{su|p=,,}}+(1-x)y{{su|p=,}}+ny = 0}}. |
The first few are: | The first few are: | ||
− | + | {| class="wikitable" style="font-size:95%; text-align:center;" | |
− | + | |- | |
− | + | ! Function | |
− | + | ! Polynomial | |
+ | |- style="height:45px;" | ||
+ | | {{nbsp|4}}{{co|laguerre(0, x)}}{{nbsp|4}} || 1 | ||
+ | |- style="height:45px;" | ||
+ | | {{co|laguerre(1, x)}} || {{math|-x + 1}} | ||
+ | |- style="height:45px;" | ||
+ | | {{co|laguerre(2, x)}} || {{math|{{mfrac|1|2}}(x{{su|p=2}} - 4x + 2)}} | ||
+ | |- style="height:45px;" | ||
+ | | {{co|laguerre(3, x)}} || {{nbsp|4}}{{math|{{mfrac|1|6}}(-x{{su|p=3}} - 9x{{su|p=2}} - 18x + 6)}}{{nbsp|4}} | ||
+ | |} | ||
+ | |||
+ | {{cpp/numeric/special functions/additional integer overload note|laguerre}} | ||
===Example=== | ===Example=== | ||
− | {{example|code= | + | {{example |
− | + | |code= | |
#include <cmath> | #include <cmath> | ||
#include <iostream> | #include <iostream> | ||
− | double L1(double x) { return -x + 1; } | + | |
− | double L2(double x) { return 0.5*(x*x-4*x+2); } | + | double L1(double x) |
+ | { | ||
+ | return -x + 1; | ||
+ | } | ||
+ | |||
+ | double L2(double x) | ||
+ | { | ||
+ | return 0.5 * (x * x - 4 * x + 2); | ||
+ | } | ||
+ | |||
int main() | int main() | ||
{ | { | ||
// spot-checks | // spot-checks | ||
std::cout << std::laguerre(1, 0.5) << '=' << L1(0.5) << '\n' | std::cout << std::laguerre(1, 0.5) << '=' << L1(0.5) << '\n' | ||
− | << std::laguerre(2, 0.5) << '=' << L2(0.5) << '\n'; | + | << std::laguerre(2, 0.5) << '=' << L2(0.5) << '\n' |
+ | << std::laguerre(3, 0.0) << '=' << 1.0 << '\n'; | ||
} | } | ||
|output= | |output= | ||
0.5=0.5 | 0.5=0.5 | ||
0.125=0.125 | 0.125=0.125 | ||
+ | 1=1 | ||
}} | }} | ||
===See also=== | ===See also=== | ||
{{dsc begin}} | {{dsc begin}} | ||
− | {{dsc inc | cpp/numeric/ | + | {{dsc inc|cpp/numeric/special_functions/dsc assoc_laguerre}} |
{{dsc end}} | {{dsc end}} | ||
===External links=== | ===External links=== | ||
− | [ | + | {{eli|[https://mathworld.wolfram.com/LaguerrePolynomial.html Weisstein, Eric W. "Laguerre Polynomial."] From MathWorld — A Wolfram Web Resource.}} |
− | + | {{langlinks|de|es|fr|it|ja|pt|ru|zh}} | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + |
Latest revision as of 09:33, 24 March 2023
Defined in header <cmath>
|
||
(1) | ||
float laguerre ( unsigned int n, float x ); double laguerre ( unsigned int n, double x ); |
(since C++17) (until C++23) |
|
/* floating-point-type */ laguerre( unsigned int n, /* floating-point-type */ x ); |
(since C++23) | |
float laguerref( unsigned int n, float x ); |
(2) | (since C++17) |
long double laguerrel( unsigned int n, long double x ); |
(3) | (since C++17) |
Defined in header <cmath>
|
||
template< class Integer > double laguerre ( unsigned int n, Integer x ); |
(A) | (since C++17) |
std::laguerre
for all cv-unqualified floating-point types as the type of the parameter x.(since C++23)Contents |
[edit] Parameters
n | - | the degree of the polynomial, an unsigned integer value |
x | - | the argument, a floating-point or integer value |
[edit] Return value
If no errors occur, value of the nonassociated Laguerre polynomial of x, that isex |
n! |
dn |
dxn |
[edit] Error handling
Errors may be reported as specified in math_errhandling
- If the argument is NaN, NaN is returned and domain error is not reported
- If x is negative, a domain error may occur
- If n is greater or equal than 128, the behavior is implementation-defined
[edit] Notes
Implementations that do not support C++17, but support ISO 29124:2010, provide this function if __STDCPP_MATH_SPEC_FUNCS__
is defined by the implementation to a value at least 201003L and if the user defines __STDCPP_WANT_MATH_SPEC_FUNCS__
before including any standard library headers.
Implementations that do not support ISO 29124:2010 but support TR 19768:2007 (TR1), provide this function in the header tr1/cmath
and namespace std::tr1
.
An implementation of this function is also available in boost.math.
The Laguerre polynomials are the polynomial solutions of the equation .
The first few are:
Function | Polynomial | ||
---|---|---|---|
laguerre(0, x) | 1 | ||
laguerre(1, x) | -x + 1 | ||
laguerre(2, x) |
| ||
laguerre(3, x) |
|
The additional overloads are not required to be provided exactly as (A). They only need to be sufficient to ensure that for their argument num of integer type, std::laguerre(int_num, num) has the same effect as std::laguerre(int_num, static_cast<double>(num)).
[edit] Example
#include <cmath> #include <iostream> double L1(double x) { return -x + 1; } double L2(double x) { return 0.5 * (x * x - 4 * x + 2); } int main() { // spot-checks std::cout << std::laguerre(1, 0.5) << '=' << L1(0.5) << '\n' << std::laguerre(2, 0.5) << '=' << L2(0.5) << '\n' << std::laguerre(3, 0.0) << '=' << 1.0 << '\n'; }
Output:
0.5=0.5 0.125=0.125 1=1
[edit] See also
(C++17)(C++17)(C++17) |
associated Laguerre polynomials (function) |
[edit] External links
Weisstein, Eric W. "Laguerre Polynomial." From MathWorld — A Wolfram Web Resource. |