Difference between revisions of "cpp/numeric/special functions/hermite"
m (Cubbi moved page cpp/numeric/special math/hermite to cpp/numeric/special functions/hermite: to special_functions) |
m (→Notes: turned the list into a table.) |
||
(7 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
{{cpp/title|hermite|hermitef|hermitel}} | {{cpp/title|hermite|hermitef|hermitel}} | ||
− | {{cpp/numeric/ | + | {{cpp/numeric/special_functions/navbar}} |
{{dcl begin}} | {{dcl begin}} | ||
− | {{dcl |num=1| | + | {{dcl header|cmath}} |
− | double hermite( unsigned int n, double x ); | + | {{dcl rev multi|num=1|since1=c++17|dcl1= |
− | float hermite( unsigned int n, float x ); | + | double hermite ( unsigned int n, double x ); |
− | long double hermite( unsigned int n, long double x ); | + | float hermite ( unsigned int n, float x ); |
+ | long double hermite ( unsigned int n, long double x ); | ||
+ | |since2=c++23|dcl2= | ||
+ | /* floating-point-type */ hermite( unsigned int n, | ||
+ | /* floating-point-type */ x ); | ||
+ | }} | ||
+ | {{dcl|num=2|since=c++17| | ||
float hermitef( unsigned int n, float x ); | float hermitef( unsigned int n, float x ); | ||
+ | }} | ||
+ | {{dcl|num=3|since=c++17| | ||
long double hermitel( unsigned int n, long double x ); | long double hermitel( unsigned int n, long double x ); | ||
}} | }} | ||
− | {{dcl |num= | + | {{dcl h|[[#Notes|Additional overloads]]}} |
− | double hermite( unsigned int n, | + | {{dcl header|cmath}} |
+ | {{dcl|num=A|since=c++17| | ||
+ | template< class Integer > | ||
+ | double hermite ( unsigned int n, Integer x ); | ||
}} | }} | ||
{{dcl end}} | {{dcl end}} | ||
− | @1@ Computes the (physicist's) | + | @1-3@ Computes the (physicist's) {{enwiki|Hermite polynomials}} of the degree {{c|n}} and argument {{c|x}}.{{rev inl|since=c++23| The library provides overloads of {{tt|std::hermite}} 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 polynomial}} | + | {{par|n|the degree of the polynomial}} |
− | {{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 order-{{ | + | If no errors occur, value of the order-{{c|n}} Hermite polynomial of {{c|x}}, that is {{math|(-1){{su|p=n}}{{mexp|x{{su|p=2}}}}{{mfrac|d{{su|p=n}}|dx{{su|p=n}}}}{{mexp|-x{{su|p=2}}}}}}, 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 {{c|n}} is greater or equal than 128, the behavior is implementation-defined. |
− | * If {{ | + | |
===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/hermite.html available in boost.math]. |
− | The Hermite polynomials are the polynomial solutions of the equation | + | The Hermite polynomials are the polynomial solutions of the equation |
− | {{math|u{{su|p=,,}}-2xu{{su|p=,}} | + | {{math|1=u{{su|p=,,}}-2xu{{su|p=,}} = -2nu}}. |
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|hermite(0, x)}}{{nbsp|4}} || {{math|1}} | ||
+ | |- style="height:45px;" | ||
+ | | {{co|hermite(1, x)}} || {{math|2x}} | ||
+ | |- style="height:45px;" | ||
+ | | {{co|hermite(2, x)}} || {{math|4x{{su|p=2}} - 2}} | ||
+ | |- style="height:45px;" | ||
+ | | {{co|hermite(3, x)}} || {{math|8x{{su|p=3}} - 12x}} | ||
+ | |- style="height:45px;" | ||
+ | | {{co|hermite(4, x)}} || {{nbsp|4}}{{math|16x{{su|p=4}} - 48x{{su|p=2}} + 12}}{{nbsp|4}} | ||
+ | |} | ||
+ | |||
+ | {{cpp/numeric/special functions/additional integer overload note|hermite}} | ||
===Example=== | ===Example=== | ||
− | {{example|code= | + | {{example |
+ | |code= | ||
#include <cmath> | #include <cmath> | ||
#include <iostream> | #include <iostream> | ||
− | double H3(double x) { return 8*std::pow(x,3) - 12*x; } | + | |
− | double H4(double x) { return 16*std::pow(x,4)-48*x*x+12; } | + | double H3(double x) |
+ | { | ||
+ | return 8 * std::pow(x, 3) - 12 * x; | ||
+ | } | ||
+ | |||
+ | double H4(double x) | ||
+ | { | ||
+ | return 16 * std::pow(x, 4) - 48 * x * x + 12; | ||
+ | } | ||
+ | |||
int main() | int main() | ||
{ | { | ||
Line 66: | Line 98: | ||
===See also=== | ===See also=== | ||
{{dsc begin}} | {{dsc begin}} | ||
− | {{dsc inc | cpp/numeric/ | + | {{dsc inc|cpp/numeric/special_functions/dsc laguerre}} |
− | {{dsc inc | cpp/numeric/ | + | {{dsc inc|cpp/numeric/special_functions/dsc legendre}} |
{{dsc end}} | {{dsc end}} | ||
===External links=== | ===External links=== | ||
− | [ | + | {{eli|[https://mathworld.wolfram.com/HermitePolynomial.html Weisstein, Eric W. "Hermite Polynomial."] From MathWorld — A Wolfram Web Resource.}} |
− | + | {{langlinks|de|es|fr|it|ja|pt|ru|zh}} | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + |
Latest revision as of 15:29, 22 March 2023
Defined in header <cmath>
|
||
(1) | ||
double hermite ( unsigned int n, double x ); float hermite ( unsigned int n, float x ); |
(since C++17) (until C++23) |
|
/* floating-point-type */ hermite( unsigned int n, /* floating-point-type */ x ); |
(since C++23) | |
float hermitef( unsigned int n, float x ); |
(2) | (since C++17) |
long double hermitel( unsigned int n, long double x ); |
(3) | (since C++17) |
Defined in header <cmath>
|
||
template< class Integer > double hermite ( unsigned int n, Integer x ); |
(A) | (since C++17) |
std::hermite
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 |
x | - | the argument, a floating-point or integer value |
[edit] Return value
If no errors occur, value of the order-n Hermite polynomial of x, that is (-1)nex2dn |
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 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 Hermite polynomials are the polynomial solutions of the equation u,,-2xu, = -2nu.
The first few are:
Function | Polynomial |
---|---|
hermite(0, x) | 1 |
hermite(1, x) | 2x |
hermite(2, x) | 4x2 - 2 |
hermite(3, x) | 8x3 - 12x |
hermite(4, x) | 16x4 - 48x2 + 12 |
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::hermite(int_num, num) has the same effect as std::hermite(int_num, static_cast<double>(num)).
[edit] Example
#include <cmath> #include <iostream> double H3(double x) { return 8 * std::pow(x, 3) - 12 * x; } double H4(double x) { return 16 * std::pow(x, 4) - 48 * x * x + 12; } int main() { // spot-checks std::cout << std::hermite(3, 10) << '=' << H3(10) << '\n' << std::hermite(4, 10) << '=' << H4(10) << '\n'; }
Output:
7880=7880 155212=155212
[edit] See also
(C++17)(C++17)(C++17) |
Laguerre polynomials (function) |
(C++17)(C++17)(C++17) |
Legendre polynomials (function) |
[edit] External links
Weisstein, Eric W. "Hermite Polynomial." From MathWorld — A Wolfram Web Resource. |