Namespaces
Variants

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

From cppreference.net
Défini dans l'en-tête <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 ) ;
(depuis C++17)
(jusqu'à C++23)
/* floating-point-type */ cyl_neumann ( /* floating-point-type */ nu,
/* floating-point-type */ x ) ;
(depuis C++23)
float cyl_neumannf ( float nu, float x ) ;
(2) (depuis C++17)
long double cyl_neumannl ( long double nu, long double x ) ;
(3) (depuis C++17)
Défini dans l'en-tête <cmath>
template < class Arithmetic1, class Arithmetic2 >

/* common-floating-point-type */

cyl_neumann ( Arithmetic1 nu, Arithmetic2 x ) ;
(A) (depuis C++17)
1-3) Calcule la fonction de Neumann cylindrique (également connue sous le nom de fonction de Bessel de seconde espèce ou fonction de Weber) de nu et x . La bibliothèque fournit des surcharges de std::cyl_neumann pour tous les types à virgule flottante non qualifiés cv comme type des paramètres nu et x . (depuis C++23)
A) Des surcharges supplémentaires sont fournies pour toutes les autres combinaisons de types arithmétiques.

Table des matières

Paramètres

nu - l'ordre de la fonction
x - l'argument de la fonction

Valeur de retour

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 ν (x) =
J ν (x)cos(νπ)-J (x)
sin(νπ)
(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.

Gestion des erreurs

Les erreurs peuvent être signalées comme spécifié dans math_errhandling :

  • Si l'argument est NaN, NaN est retourné et aucune erreur de domaine n'est signalée.
  • Si nu≥128 , le comportement est défini par l'implémentation.

Notes

Les implémentations qui ne prennent pas en charge C++17, mais qui prennent en charge ISO 29124:2010 , fournissent cette fonction si __STDCPP_MATH_SPEC_FUNCS__ est défini par l'implémentation à une valeur d'au moins 201003L et si l'utilisateur définit __STDCPP_WANT_MATH_SPEC_FUNCS__ avant d'inclure tout en-tête de la bibliothèque standard.

Les implémentations qui ne prennent pas en charge ISO 29124:2010 mais supportent TR 19768:2007 (TR1), fournissent cette fonction dans l'en-tête tr1/cmath et l'espace de noms std::tr1 .

Une implémentation de cette fonction est également disponible dans boost.math .

Les surcharges supplémentaires ne sont pas tenues d'être fournies exactement comme (A) . Elles doivent seulement être suffisantes pour garantir que pour leur premier argument num1 et second argument num2 :

  • Si num1 ou num2 a le type long double , alors std :: cyl_neumann ( num1, num2 ) a le même effet que std :: cyl_neumann ( static_cast < long double > ( num1 ) ,
    static_cast < long double > ( num2 ) )
    .
  • Sinon, si num1 et/ou num2 a le type double ou un type entier, alors std :: cyl_neumann ( num1, num2 ) a le même effet que std :: cyl_neumann ( static_cast < double > ( num1 ) ,
    static_cast < double > ( num2 ) )
    .
  • Sinon, si num1 ou num2 a le type float , alors std :: cyl_neumann ( num1, num2 ) a le même effet que std :: cyl_neumann ( static_cast < float > ( num1 ) ,
    static_cast < float > ( num2 ) )
    .
(jusqu'à C++23)

Si num1 et num2 ont des types arithmétiques, alors std :: cyl_neumann ( num1, num2 ) a le même effet que std :: cyl_neumann ( static_cast < /* common-floating-point-type */ > ( num1 ) ,
static_cast < /* common-floating-point-type */ > ( num2 ) )
, où /* common-floating-point-type */ est le type à virgule flottante ayant le plus grand rang de conversion en virgule flottante et la plus grande sous-catégorie de conversion en virgule flottante entre les types de num1 et num2 , les arguments de type entier sont considérés comme ayant le même rang de conversion en virgule flottante que double .

Si aucun tel type à virgule flottante avec le plus grand rang et la plus grande sous-catégorie n'existe, alors la résolution de surcharge ne résulte pas en un candidat utilisable parmi les surcharges fournies.

(depuis C++23)

Exemple

#include <cassert>
#include <cmath>
#include <iostream>
#include <numbers>
const double π = std::numbers::pi; // ou std::acos(-1) en pré-C++20
// Pour calculer la fonction de Neumann cylindrique via la fonction de Bessel cylindrique de
// première espèce, nous devons implémenter J, car l'invocation directe de
// std::cyl_bessel_j(nu, x), selon la formule ci-dessus,
// pour nu négatif lève 'std::domain_error': Mauvais argument dans __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 << "vérifications ponctuelles pour 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 << ", calculé via J = " << j << '\n';
        assert(n == j);
    }
}

Sortie :

vérifications ponctuelles pour nu == 0.5
N_.5(+0.000000) = -inf, calculé via J = -inf
N_.5(+0.333000) = -1.306713, calculé via J = -1.306713
N_.5(+0.666000) = -0.768760, calculé via J = -0.768760
N_.5(+0.999000) = -0.431986, calculé via J = -0.431986
N_.5(+1.332000) = -0.163524, calculé via J = -0.163524
N_.5(+1.665000) = +0.058165, calculé via J = +0.058165
N_.5(+1.998000) = +0.233876, calculé via J = +0.233876

Voir aussi

fonctions de Bessel cylindriques modifiées régulières
(fonction)
fonctions de Bessel cylindriques (de première espèce)
(fonction)
fonctions de Bessel cylindriques modifiées irrégulières
(fonction)

Liens externes

Weisstein, Eric W. "Bessel Function of the Second Kind." De MathWorld — Une ressource web Wolfram.