E.V.E
v2022.09.01

◆ laguerre

eve::laguerre = {}
inlineconstexpr

Computes the value of the Laguerre and associated Laguerre polynomials of order n at x:

  • The Laguerre polynomial of order n is given by \(\displaystyle \mbox{L}_{n}(x) = \frac{e^x}{n!}\frac{d^n}{dx^n}(x^ne^{-x})\).
  • The associated laguerre polynomial is given by \(\displaystyle \mbox{L}_{n}^{m} = (-1)^m\frac{d^m}{dx^m}\mbox{L}_{n+m}(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> laguerre(N n, T x) noexcept; //1
template< eve::integral_value N, eve::integral_value M, eve::floating_real_value T >
eve::as_wide_as<T, N> laguerre(N n, M m, T x) noexcept; //2
}
constexpr callable_laguerre_ laguerre
Computes the value of the Laguerre and associated Laguerre polynomials of order n at x:
Definition: laguerre.hpp:84
Definition: all_of.hpp:22
  1. Evaluate the laguerre polynomial of order n
  2. Evaluate the associated laguerre polynomial of orders n, m.

Parameters

Return value

The value of the polynomial at x 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(0.5);
std::cout << "---- simd" << '\n'
<< "<- xd = " << xd << '\n'
<< "<- n = " << n << '\n'
<< "<- x = " << x << '\n'
<< "-> laguerre(n, xd) = " << eve::laguerre(n, xd) << '\n'
<< "-> laguerre(3, xd) = " << eve::laguerre(3, xd) << '\n'
<< "-> laguerre(n, 0.5) = " << eve::laguerre(n, 0.5) << '\n'
<< "-> laguerre(n, x) = " << eve::laguerre(n, x) << '\n';
double xs = 3.0;
std::cout << "---- scalar" << '\n'
<< "<- xs = " << xs << '\n'
<< "-> laguerre(4, xs) = " << eve::laguerre(4, xs) << '\n';
return 0;
}
Wrapper for SIMD registers.
Definition: wide.hpp:65

Semantic Modifiers

  • eve::successor

    The expression successor(laguerre)(n, x, ln, lnm1) implements the three term recurrence relation for the Laguerre polynomials, \(\displaystyle \mbox{L}_{n+1} = \left((2n+1-x)\mbox{L}_{n}-n\mbox{L}_{n-1}\right)/(n+1)\)

    The expression successor(laguerre)(n, m, x, ln, lnmm1) implements the three term recurrence relation for the associated Laguerre polynomials, \(\displaystyle \mbox{L}_{n+1}^m = \left((m+2n+1-x)\mbox{L}_{n}^{m}-(m+n)\mbox{L}_{n-1}^{m}\right)/(n+1)\)

    These functions can be used to create a sequence of values evaluated at the same x (and m) 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::laguerre(0, xd);
    std::cout << "-> h[0] = " << h[0] << '\n';
    std::cout << "-> laguerre(" << 0 << ", xd) = " << eve::laguerre(0, xd) << '\n';
    h[1] = eve::laguerre(1, xd);
    std::cout << "-> laguerre(" << 1 << ", xd) = " << eve::laguerre(1, xd) << '\n';
    std::cout << "-> h[1] = " << h[1] << '\n';
    for(int i = 2; i <= 7; ++i)
    {
    h[i] = eve::successor(eve::laguerre)(i-1, xd, h[i-1], h[i-2]);
    std::cout << "-> h[" << i << "] = " << h[i] << '\n';
    std::cout << "-> laguerre(" << i << ", xd) = " << eve::laguerre(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