E.V.E
v2022.03.00

◆ hermite

eve::hermite = {}
inlineconstexpr

Computes the value of the 'physicists' Hermite polynomial of order n at x:

The physicists Hermite polynomials are a sequence of orthogonal polynomials relative to \(e^{-x^2}\) on the \([-\infty, +\infty]\) interval satisfying the following recurrence relation:

  • \( \mathbf{H}_0(x) = 1\).
  • \( \mathbf{H}_1(x) = 2x\).
  • \( \mathbf{H}_n(x) = 2x\mathbf{H}_{n-1}(x) -2(n-1)\mathbf{H}_{n-2}x\).

Defined in header

#include <eve/module/polynomial.hpp>

Callable Signatures

namespace eve
{
template< eve::integral_value N, eve::floating_real_value T >
eve::as_wide_as<T, N> hermite(N n, T x) noexcept;
}
constexpr callable_hermite_ hermite
Computes the value of the 'physicists' Hermite polynomial of order n at x:
Definition: hermite.hpp:75
Definition: all_of.hpp:22

Parameters

Return value

The value of the 'physicists' hermite polynomial \( \displaystyle \mathbf{H}_n(x) = (-1)^n e^{x^2}\frac{d}{dx^n}e^{-x^2}\) is returned.

Example

#include <eve/module/polynomial.hpp>
#include <eve/wide.hpp>
#include <iostream>
int main()
{
wide_ft xd = {0.5, -1.5, 0.1, -1.0, 19.0, 25.0, 21.5, 10000.0};
wide_it n = {0, 1, 2, 3, 4, 5, 6, 7};
wide_ft x(2.0);
std::cout << "---- simd" << '\n'
<< "<- xd = " << xd << '\n'
<< "<- n = " << n << '\n'
<< "<- x = " << x << '\n'
<< "-> hermite(n, xd) = " << eve::hermite(n, xd) << '\n'
<< "-> hermite(3, xd) = " << eve::hermite(3, xd) << '\n'
<< "-> hermite(n, 2.0) = " << eve::hermite(n, 2.0) << '\n'
<< "-> hermite(n, x) = " << eve::hermite(n, x) << '\n'
;
double xs = 3.0;
std::cout << "---- scalar" << '\n'
<< "<- xs = " << xs << '\n'
<< "-> hermite(4, xs) = " << eve::hermite(4, xs) << '\n';
return 0;
}
Wrapper for SIMD registers.
Definition: wide.hpp:65

Semantic Modifiers

  • eve::successor

    The expression successor(hermite)(n, x, Hn, Hnm1) implements the three terms recurrence relation for the physicists Hermite polynomials, \(\displaystyle \mbox{H}_{n+1} = (2*x)\mbox{H}_{n}-2*n\mbox{H}_{n-1}\)

    This function can be used to create a sequence of values evaluated at the same x, and for rising n.

    Example

    #include <eve/module/polynomial.hpp>
    #include <eve/wide.hpp>
    #include <iostream>
    int main()
    {
    wide_ft xd = {0.5, -1.5, 0.1, -1.0, 19.0, 25.0, 21.5, 10000.0};
    wide_it n = {0, 1, 2, 3, 4, 5, 6, 7};
    std::cout << "---- simd" << '\n'
    << "<- xd = " << xd << '\n'
    << "<- n = " << n << '\n';
    std::array<wide_ft, 8> h;
    h[0] = eve::hermite(0, xd);
    std::cout << "-> h[0] = " << h[0] << '\n';
    std::cout << "-> hermite(" << 0 << ", xd) = " << eve::hermite(0, xd) << '\n';
    h[1] = eve::hermite(1, xd);
    std::cout << "-> hermite(" << 1 << ", xd) = " << eve::hermite(1, xd) << '\n';
    std::cout << "-> h[1] = " << h[1] << '\n';
    for(int i = 2; i <= 7; ++i)
    {
    h[i] = eve::successor(eve::hermite)(i-1, xd, h[i-1], h[i-2]);
    std::cout << "-> h[" << i << "] = " << h[i] << '\n';
    std::cout << "-> hermite(" << i << ", xd) = " << eve::hermite(i, xd) << '\n';
    }
    return 0;
    }
    constexpr callable_i_ i
    Callable object computing the pure imaginary ( ) value.
    Definition: i.hpp:51
    constexpr successor_type const successor
    Higher-order Callable Object imbuing incrementation behaviour onto other Callable Objects.
    Definition: successor.hpp:42