Namespaces
Variants

std:: cyl_neumann, std:: cyl_neumannf, std:: cyl_neumannl

From cppreference.net
Definido en el encabezado <cmath>
(1)
float cyl_neumann ( float nu, float x ) ;

double cyl_neumann ( double nu, double x ) ;

long double cyl_neumann ( long double nu, long double x ) ;
(desde C++17)
(hasta C++23)
/* floating-point-type */ cyl_neumann ( /* floating-point-type */ nu,
/* floating-point-type */ x ) ;
(desde C++23)
float cyl_neumannf ( float nu, float x ) ;
(2) (desde C++17)
long double cyl_neumannl ( long double nu, long double x ) ;
(3) (desde C++17)
Definido en el encabezado <cmath>
template < class Arithmetic1, class Arithmetic2 >

/* common-floating-point-type */

cyl_neumann ( Arithmetic1 nu, Arithmetic2 x ) ;
(A) (desde C++17)
1-3) Calcula la función de Neumann cilíndrica (también conocida como función de Bessel de segunda especie o función de Weber) de nu y x . La biblioteca proporciona sobrecargas de std::cyl_neumann para todos los tipos de punto flotante sin calificación cv como tipo de los parámetros nu y x . (desde C++23)
A) Se proporcionan sobrecargas adicionales para todas las demás combinaciones de tipos aritméticos.

Contenidos

Parámetros

nu - el orden de la función
x - el argumento de la función

Valor de retorno

If no errors occur, value of the cylindrical Neumann function (Bessel function of the second kind) of nu and x , is returned, that is N nu (x) =
J nu (x)cos(nuπ)-J -nu (x)
sin(nuπ)
(where J nu (x) is std:: cyl_bessel_j ( nu, x ) ) for x≥0 and non-integer nu ; for integer nu a limit is used.

Manejo de errores

Los errores pueden ser reportados como se especifica en math_errhandling :

  • Si el argumento es NaN, se devuelve NaN y no se reporta un error de dominio.
  • Si nu≥128 , el comportamiento está definido por la implementación.

Notas

Las implementaciones que no son compatibles con C++17, pero sí con ISO 29124:2010 , proporcionan esta función si __STDCPP_MATH_SPEC_FUNCS__ está definido por la implementación con un valor de al menos 201003L y si el usuario define __STDCPP_WANT_MATH_SPEC_FUNCS__ antes de incluir cualquier cabecera de la biblioteca estándar.

Las implementaciones que no admiten ISO 29124:2010 pero sí admiten TR 19768:2007 (TR1), proporcionan esta función en el encabezado tr1/cmath y el espacio de nombres std::tr1 .

Una implementación de esta función también está disponible en boost.math .

Las sobrecargas adicionales no requieren ser proporcionadas exactamente como (A) . Solo necesitan ser suficientes para garantizar que para su primer argumento num1 y segundo argumento num2 :

  • Si num1 o num2 tiene tipo long double , entonces std :: cyl_neumann ( num1, num2 ) tiene el mismo efecto que std :: cyl_neumann ( static_cast < long double > ( num1 ) ,
    static_cast < long double > ( num2 ) )
    .
  • En caso contrario, si num1 y/o num2 tiene tipo double o un tipo entero, entonces std :: cyl_neumann ( num1, num2 ) tiene el mismo efecto que std :: cyl_neumann ( static_cast < double > ( num1 ) ,
    static_cast < double > ( num2 ) )
    .
  • En caso contrario, si num1 o num2 tiene tipo float , entonces std :: cyl_neumann ( num1, num2 ) tiene el mismo efecto que std :: cyl_neumann ( static_cast < float > ( num1 ) ,
    static_cast < float > ( num2 ) )
    .
(hasta C++23)

Si num1 y num2 tienen tipos aritméticos, entonces std :: cyl_neumann ( num1, num2 ) tiene el mismo efecto que std :: cyl_neumann ( static_cast < /* common-floating-point-type */ > ( num1 ) ,
static_cast < /* common-floating-point-type */ > ( num2 ) )
, donde /* common-floating-point-type */ es el tipo de punto flotante con el mayor rango de conversión de punto flotante y mayor subrango de conversión de punto flotante entre los tipos de num1 y num2 , los argumentos de tipo entero se consideran con el mismo rango de conversión de punto flotante que double .

Si no existe tal tipo de punto flotante con el mayor rango y subrango, entonces la resolución de sobrecarga no resulta en un candidato utilizable de las sobrecargas proporcionadas.

(desde C++23)

Ejemplo

#include <cassert>
#include <cmath>
#include <iostream>
#include <numbers>
const double π = std::numbers::pi; // o std::acos(-1) en pre C++20
// Para calcular la función cilíndrica de Neumann mediante la función cilíndrica de Bessel de
// primera clase debemos implementar J, porque la invocación directa de
// std::cyl_bessel_j(nu, x), según la fórmula anterior,
// para nu negativo lanza 'std::domain_error': Argumento incorrecto en __cyl_bessel_j.
double J_neg(double nu, double x)
{
    return std::cos(-nu * π) * std::cyl_bessel_j(-nu, x)
          -std::sin(-nu * π) * std::cyl_neumann(-nu, x);
}
double J_pos(double nu, double x)
{
    return std::cyl_bessel_j(nu, x);
}
double J(double nu, double x)
{
    return nu < 0.0 ? J_neg(nu, x) : J_pos(nu, x);
}
int main()
{
    std::cout << "comprobaciones puntuales para nu == 0.5\n" << std::fixed << std::showpos;
    const double nu = 0.5;
    for (double x = 0.0; x <= 2.0; x += 0.333)
    {
        const double n = std::cyl_neumann(nu, x);
        const double j = (J(nu, x) * std::cos(nu * π) - J(-nu, x)) / std::sin(nu * π);
        std::cout << "N_.5(" << x << ") = " << n << ", calculado mediante J = " << j << '\n';
        assert(n == j);
    }
}

Salida:

comprobaciones puntuales para nu == 0.5
N_.5(+0.000000) = -inf, calculado mediante J = -inf
N_.5(+0.333000) = -1.306713, calculado mediante J = -1.306713
N_.5(+0.666000) = -0.768760, calculado mediante J = -0.768760
N_.5(+0.999000) = -0.431986, calculado mediante J = -0.431986
N_.5(+1.332000) = -0.163524, calculado mediante J = -0.163524
N_.5(+1.665000) = +0.058165, calculado mediante J = +0.058165
N_.5(+1.998000) = +0.233876, calculado mediante J = +0.233876

Véase también

funciones cilíndricas de Bessel modificadas regulares
(función)
funciones cilíndricas de Bessel (de primera especie)
(función)
funciones cilíndricas de Bessel modificadas irregulares
(función)

Enlaces externos

Weisstein, Eric W. "Bessel Function of the Second Kind." De MathWorld — Un recurso web de Wolfram.