Legendre, legendref y legendrel son funciones integradas en C++ STL que se utilizan para calcular el valor de polinomios no asociados de grado n y argumento x. El valor de orden-n polinomio de Legendre no asociado de x viene dado por:
Los primeros polinomios de Legendre son
Sintaxis:
double legendre( unsigned int n, double x ) or double legendre( unsigned int n, float x ) or double legendre( unsigned int n, long double x ) or float legendref( unsigned int n, float x ) or long double legendrel( unsigned int n, long double x )
Parámetros : la función acepta dos parámetros obligatorios que se describen a continuación:
- n: especifica el grado del polinomio.
- x: especifica el argumento que denota un valor de tipo coma flotante o integral
Valor devuelto: la función devuelve el valor del polinomio de Legendre no asociado de orden n para el argumento x. El tipo de retorno depende de los parámetros pasados.
Nota : la función se ejecuta en y por encima de C++ 17 (7.1).
El siguiente programa ilustra las funciones mencionadas anteriormente:
// C++ program to illustrate the above // mentioned three functions #include <cmath> #include <iostream> using namespace std; int main() { // int and double as parameter cout << "legendre(2,0.3)= " << legendre(2,0.3); // x as double type parameter cout << "\nlegendre(3,(double)0.4)=" << legendre(3,(double)0.4); // x as float cout << "\nlegendre(3,(float)0.4)= " << legendre(3,(float)0.4); // legendref cout << "\nlegendref(3, 0.45)= " << legendref(3, 0.45); // legendrel cout << "\nlegendrel(7, 0.50)= " << legendrel(7, 0.50); return 0; }
Errores y excepciones : la función arroja un error en tres casos que se describen a continuación:
- Si el argumento es NaN, se devuelve NaN y no se notifica el error de dominio
- No es necesario definir la función para |x|>1
- Si n es mayor o igual que 128, el comportamiento está definido por la implementación
Los siguientes programas ilustran los errores anteriores:
Programa 1:
// C++ program to illustrate the above // mentioned three functions // domain error #include <cmath> #include <iostream> using namespace std; int main() { // int and double as parameter cout << "legendre(129, 2)= " << legendre(129, 2); return 0; }
Producción:
terminate called after throwing an instance of 'std::domain_error' what(): Argument out of range in __poly_legendre_p. legendre(129, 2)=
Programa 2:
// C++ program to illustrate the above // mentioned three functions // when x is NaN #include <cmath> #include <iostream> using namespace std; int main() { // int and double as parameter cout << "legendre(129, NaN)= " << legendre(129, sqrt(-2)); return 0; }
Producción:
legendre(129, NaN)= nan
Programa 3:
// C++ program to illustrate the above // mentioned three functions // domain error #include <cmath> #include <iostream> using namespace std; int main() { // int and double as parameter cout << "legendre(129, 2)= " << legendre(129, 2); return 0; }
Producción:
terminate called after throwing an instance of 'std::domain_error' what(): Argument out of range in __poly_legendre_p.