Difference between revisions of "cpp/numeric/special functions/laguerre"
m ({enwiki}) |
(Applied P1467R9.) |
||
Line 3: | Line 3: | ||
{{dcl begin}} | {{dcl begin}} | ||
{{dcl header|cmath}} | {{dcl header|cmath}} | ||
− | {{dcl|num=1| | + | {{dcl |num=1|=c++17| |
− | + | ||
float laguerre ( unsigned int n, float x ); | float laguerre ( unsigned int n, float x ); | ||
+ | |||
long double laguerre ( unsigned int n, long double x ); | long double laguerre ( unsigned int n, long double x ); | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
float laguerref( unsigned int n, float x ); | float laguerref( unsigned int n, float x ); | ||
+ | |||
+ | |||
long double laguerrel( unsigned int n, long double x ); | long double laguerrel( unsigned int n, long double x ); | ||
}} | }} | ||
− | {{dcl|num= | + | |
− | double laguerre ( unsigned int n, | + | |
+ | {{dcl|num=|since=c++17| | ||
+ | |||
+ | double laguerre ( unsigned int n, x ); | ||
}} | }} | ||
{{dcl end}} | {{dcl end}} | ||
− | @1@ Computes the non-associated {{enwiki|Laguerre polynomials}} of the degree {{ | + | @1@ Computes the non-associated {{enwiki|Laguerre polynomials}} of the degree {{|n}} and argument {{|x}}overloads of |type {{|}} |
− | + | {{c|double}}. | |
===Parameters=== | ===Parameters=== | ||
{{par begin}} | {{par begin}} | ||
− | {{par|n|the degree of the polynomial, | + | {{par|n|the degree of the polynomial, unsigned integer }} |
− | {{par|x|the argument, | + | {{par|x|the argument, a floating-point or }} |
{{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 {{|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 {{lc|math_errhandling}} | 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 {{|x}} is negative, a domain error may occur |
− | * If {{ | + | * If {{|n}} is greater or equal than 128, the behavior is implementation-defined |
===Notes=== | ===Notes=== | ||
− | {{cpp/numeric/ | + | {{cpp/numeric//}} |
− | 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] | + | 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 = 0}} | + | 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: | ||
− | * {{tt|laguerre(0, x)}} | + | * {{tt|laguerre(0, x)}} = 1 |
− | * {{tt|laguerre(1, x)}} | + | * {{tt|laguerre(1, x)}} = {{math|-x + 1}} |
− | * {{tt|laguerre(2, x)}} | + | * {{tt|laguerre(2, x)}} = {{math|{{mfrac|1|2}}[x{{su|p=2}}-4x+2]}} |
− | * {{tt|laguerre(3, x)}} | + | * {{tt|laguerre(3, x)}} = {{math|{{mfrac|1|6}}[-x{{su|p=3}}-9x{{su|p=2}}-18x+6] |
+ | |||
+ | }} | ||
===Example=== | ===Example=== | ||
− | {{example|code= | + | {{example |
+ | |code= | ||
#include <cmath> | #include <cmath> | ||
#include <iostream> | #include <iostream> | ||
− | double L1(double x) { return -x + 1; } | + | double L1(double x) |
− | double L2(double x) { return 0.5 * (x * x - 4 * x + 2); } | + | { |
+ | return -x + 1; | ||
+ | } | ||
+ | |||
+ | double L2(double x) | ||
+ | { | ||
+ | return 0.5 * (x * x - 4 * x + 2); | ||
+ | } | ||
int main() | int main() |
Revision as of 18:46, 22 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 |
Parameters
n | - | the degree of the polynomial, an unsigned integer value |
x | - | the argument, a floating-point or integer value |
Return value
If no errors occur, value of the nonassociated Laguerre polynomial of x, that isex |
n! |
dn |
dxn |
e-x), is returned.
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
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:
-
laguerre(0, x)
= 1 -
laguerre(1, x)
= -x + 1 -
laguerre(2, x)
=
[x21 2
-4x+2] -
laguerre(3, x)
=
[-x31 6
-9x2
-18x+6]
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)).
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
See also
(C++17)(C++17)(C++17) |
associated Laguerre polynomials (function) |
External links
Weisstein, Eric W. "Laguerre Polynomial." From MathWorld — A Wolfram Web Resource. |