Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/numeric/special functions/hermite"

From cppreference.com
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/special_math/navbar}}
+
{{cpp/numeric/special_functions/navbar}}
 
{{dcl begin}}
 
{{dcl begin}}
{{dcl |num=1|since=c++17|
+
{{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=2|since=c++17|
+
{{dcl h|[[#Notes|Additional overloads]]}}
double      hermite( unsigned int n, IntegralType x );
+
{{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) [[enwiki:Hermite_polynomials|Hermite polynomials]] of the degree {{tt|n}} and argument {{tt|x}}
+
@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}}.}}
@2@ A set of overloads or a function template accepting an argument of any [[cpp/types/is_integral|integral type]]. Equivalent to {{v|1}} after casting the argument to {{c|double}}.
+
@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, a value of a floating-point or integral type}}
+
{{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-{{tt|n}}Hermite polynomial of {{tt|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.
+
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 [[cpp/numeric/math/math_errhandling|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 {{c|n}} is greater or equal than 128, the behavior is implementation-defined.
* If {{tt|n}} is greater or equal than 128, the behavior is implementation-defined
+
  
 
===Notes===
 
===Notes===
{{cpp/numeric/special_math/older_impl_note}}
+
{{cpp/numeric/special functions/older impl note}}
  
An implementation of this function is also [http://www.boost.org/doc/libs/release/libs/math/doc/html/math_toolkit/sf_poly/hermite.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/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=,}} {{=}} -2nu}}
+
{{math|1=u{{su|p=,,}}-2xu{{su|p=,}} = -2nu}}.
  
 
The first few are:
 
The first few are:
* hermite(0, x) {{=}} {{math|1}}
+
{| class="wikitable" style="font-size:95%; text-align:center;"
* hermite(1, x) {{=}} {{math|2x}}
+
|-
* hermite(2, x) {{=}} {{math|4x{{su|p=2}}-2}}
+
! Function
* hermite(3, x) {{=}} {{math|8x{{su|p=3}}-12x}}
+
! Polynomial
* hermite(4, x) {{=}} {{math|16x{{su|p=4}}-48x{{su|p=2}}+12}}
+
|- 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/special_math/dsc laguerre}}
+
{{dsc inc|cpp/numeric/special_functions/dsc laguerre}}
{{dsc inc | cpp/numeric/special_math/dsc legendre}}
+
{{dsc inc|cpp/numeric/special_functions/dsc legendre}}
 
{{dsc end}}
 
{{dsc end}}
  
 
===External links===
 
===External links===
[http://mathworld.wolfram.com/HermitePolynomial.html Weisstein, Eric W. ""Hermite Polynomial."] From MathWorld--A Wolfram Web Resource.
+
{{eli|[https://mathworld.wolfram.com/HermitePolynomial.html Weisstein, Eric W. "Hermite Polynomial."] From MathWorld A Wolfram Web Resource.}}
  
[[de:cpp/numeric/special_math/hermite]]
+
{{langlinks|de|es|fr|it|ja|pt|ru|zh}}
[[es:cpp/numeric/special_math/hermite]]
+
[[fr:cpp/numeric/special_math/hermite]]
+
[[it:cpp/numeric/special_math/hermite]]
+
[[ja:cpp/numeric/special_math/hermite]]
+
[[pt:cpp/numeric/special_math/hermite]]
+
[[ru:cpp/numeric/special_math/hermite]]
+
[[zh:cpp/numeric/special_math/hermite]]
+

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 );

long double hermite ( unsigned int n, long double 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)
1-3) Computes the (physicist's) Hermite polynomials of the degree n and argument x. The library provides overloads of std::hermite for all cv-unqualified floating-point types as the type of the parameter x.(since C++23)
A) Additional overloads are provided for all integer types, which are treated as double.

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)nex2
dn
dxn
e-x2
, is returned.

[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) [edit]
(C++17)(C++17)(C++17)
Legendre polynomials
(function) [edit]

[edit] External links

Weisstein, Eric W. "Hermite Polynomial." From MathWorld — A Wolfram Web Resource.