Namensräume
Varianten
Aktionen

std::legendre, std::legendref, std::legendrel

Von cppreference.com
 
 
 
 
double      legendre( unsigned int n, double x );

double      legendre( unsigned int n, float x );
double      legendre( unsigned int n, long double x );
float       legendref( unsigned int n, float x );

long double legendrel( unsigned int n, long double x );
(1)
double      legendre( unsigned int n, IntegralType x );
(2)
1) Berechnet die unassoziativierten Legendre-Polynome des Grades n und des Arguments x.
2) Eine Menge von Überladungen oder eine Funktionsschablone, die ein Argument eines beliebigen Ganzzahltyps akzeptiert. Entspricht (1) nach Umwandlung des Arguments in double.

Wie alle Spezialfunktionen ist legendre nur dann garantiert in <cmath> verfügbar, wenn __STDCPP_MATH_SPEC_FUNCS__ von der Implementierung auf einen Wert von mindestens 201003L definiert ist und wenn der Benutzer __STDCPP_WANT_MATH_SPEC_FUNCS__ definiert, bevor er irgendeine Standardbibliothek-Header-Datei einschließt.

Inhalt

[bearbeiten] Parameter

n - der Grad des Polynoms
x - das Argument, ein Wert vom Fließkomma- oder Ganzzahltyp

[bearbeiten] Rückgabewert

Wenn keine Fehler auftreten, wird der Wert des unassoziativierten Legendre-Polynoms der Ordnung n von x zurückgegeben, d.h.
1
2n
n!
dn
dxn
(x2
- 1)n
.

[bearbeiten] Fehlerbehandlung

Fehler können wie in math_errhandling angegeben gemeldet werden.

  • Wenn das Argument NaN ist, wird NaN zurückgegeben und kein Domänenfehler gemeldet.
  • Die Funktion muss nicht für |x| > 1 definiert sein.
  • Wenn n größer oder gleich 128 ist, ist das Verhalten implementierungsabhängig.

[bearbeiten] Anmerkungen

Implementierungen, die TR 29124 nicht unterstützen, aber TR 19768 unterstützen, stellen diese Funktion im Header tr1/cmath und im Namensraum std::tr1 bereit.

Eine Implementierung dieser Funktion ist auch in boost.math verfügbar.

Die ersten wenigen Legendre-Polynome sind:

  • legendre(0, x) = 1.
  • legendre(1, x) = x.
  • legendre(2, x) =
    1
    2
    (3x2
    - 1)
    .
  • legendre(3, x) =
    1
    2
    (5x3
    - 3x)
    .
  • legendre(4, x) =
    1
    8
    (35x4
    - 30x2
    + 3)
    .

[bearbeiten] Beispiel

(funktioniert wie gezeigt mit gcc 6.0)

#define __STDCPP_WANT_MATH_SPEC_FUNCS__ 1
#include <cmath>
#include <iostream>
 
double P3(double x)
{
    return 0.5 * (5 * std::pow(x, 3) - 3 * x);
}
 
double P4(double x)
{
    return 0.125 * (35 * std::pow(x, 4) - 30 * x * x + 3);
}
 
int main()
{
    // spot-checks
    std::cout << std::legendre(3, 0.25) << '=' << P3(0.25) << '\n'
              << std::legendre(4, 0.25) << '=' << P4(0.25) << '\n';
}

Ausgabe

-0.335938=-0.335938
0.157715=0.157715

[bearbeiten] Siehe auch

Laguerre-Polynome
(Funktion) [bearbeiten]
Hermite-Polynome
(Funktion) [bearbeiten]

[bearbeiten] Externe Links

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