Namensräume
Varianten
Aktionen

std::assoc_legendre, std::assoc_legendref, std::assoc_legendrel

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

double      assoc_legendre( unsigned int n, unsigned int m, float x );
double      assoc_legendre( unsigned int n, unsigned int m, long double x );
float       assoc_legendref( unsigned int n, unsigned int m, float x );

long double assoc_legendrel( unsigned int n, unsigned int m, long double x );
(1)
double      assoc_legendre( unsigned int n, unsigned int m, IntegralType x );
(2)
1) Berechnet die assezierten Legendre-Polynome des Grades n, der Ordnung m 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 speziellen Funktionen ist assoc_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 Standardbibliotheks-Header-Datei einbindet.

Inhalt

[edit] Parameter

n - der Grad des Polynoms, ein Wert vom Typ `unsigned int`
m - die Ordnung des Polynoms, ein Wert vom Typ `unsigned int`
x - das Argument, ein Wert vom Fließkomma- oder Ganzzahltyp

[edit] Rückgabewert

Wenn keine Fehler auftreten, wird der Wert des assoziierten Legendre-Polynoms Pm
n
von x zurückgegeben, d.h. (1 - x2
)m/2
dm
dxm
Pn(x)
(wobei Pn(x) das unassoziierte Legendre-Polynom ist, std::legendre(n, x)).

[edit] 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.
  • Wenn |x| > 1, kann ein Domänenfehler auftreten.
  • Wenn n größer oder gleich 128 ist, ist das Verhalten implementierungsdefiniert.

[edit] 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 assoziierten Legendre-Polynome sind:

  • assoc_legendre(0, 0, x) = 1.
  • assoc_legendre(1, 0, x) = x.
  • assoc_legendre(1, 1, x) = -(1 - x2
    )1/2
    .
  • assoc_legendre(2, 0, x) =
    1
    2
    (3x2
    - 1)
    .
  • assoc_legendre(2, 1, x) = -3x(1 - x2
    )1/2
    .
  • assoc_legendre(2, 2, x) = 3(1 - x2
    )
    .

[edit] Beispiel

(funktioniert wie gezeigt mit gcc 6.0)

#define __STDCPP_WANT_MATH_SPEC_FUNCS__ 1
#include <cmath>
#include <iostream>
 
double P20(double x)
{
    return 0.5 * (3 * x * x - 1);
}
 
double P21(double x)
{
    return -3.0 * x * std::sqrt(1 - x * x);
}
 
double P22(double x)
{
    return 3 * (1 - x * x);
}
 
int main()
{
    // spot-checks
    std::cout << std::assoc_legendre(2, 0, 0.5) << '=' << P20(0.5) << '\n'
              << std::assoc_legendre(2, 1, 0.5) << '=' << P21(0.5) << '\n'
              << std::assoc_legendre(2, 2, 0.5) << '=' << P22(0.5) << '\n';
}

Ausgabe

-0.125=-0.125
-1.29904=-1.29904
2.25=2.25

[edit] Siehe auch

Legendre-Polynome
(Funktion) [edit]

[edit] Externe Links

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