Namespaces
Variants

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

From cppreference.net
Definiert im Header <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 ) ;
(seit C++17)
(bis C++23)
/* floating-point-type */ cyl_neumann ( /* floating-point-type */ nu,
/* floating-point-type */ x ) ;
(seit C++23)
float cyl_neumannf ( float nu, float x ) ;
(2) (seit C++17)
long double cyl_neumannl ( long double nu, long double x ) ;
(3) (seit C++17)
Definiert im Header <cmath>
template < class Arithmetic1, class Arithmetic2 >

/* common-floating-point-type */

cyl_neumann ( Arithmetic1 nu, Arithmetic2 x ) ;
(A) (seit C++17)
1-3) Berechnet die Neumann-Funktion (auch bekannt als Bessel-Funktion zweiter Art oder Weber-Funktion) von nu und x . Die Bibliothek bietet Überladungen von std::cyl_neumann für alle cv-unqualifizierten Gleitkommatypen als Typ der Parameter nu und x . (seit C++23)
A) Zusätzliche Überladungen werden für alle anderen Kombinationen arithmetischer Typen bereitgestellt.

Inhaltsverzeichnis

Parameter

nu - die Ordnung der Funktion
x - das Argument der Funktion

Rückgabewert

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.

Fehlerbehandlung

Fehler können wie in math_errhandling spezifiziert gemeldet werden:

  • Wenn das Argument NaN ist, wird NaN zurückgegeben und kein Domänenfehler gemeldet.
  • Wenn nu≥128 , ist das Verhalten implementierungsdefiniert.

Hinweise

Implementierungen, die C++17 nicht unterstützen, aber ISO 29124:2010 unterstützen, stellen diese Funktion bereit, wenn __STDCPP_MATH_SPEC_FUNCS__ durch die Implementierung auf einen Wert von mindestens 201003L definiert ist und wenn der Benutzer __STDCPP_WANT_MATH_SPEC_FUNCS__ definiert, bevor er beliebige Standardbibliotheksheader einbindet.

Implementierungen, die ISO 29124:2010 nicht unterstützen, aber TR 19768:2007 (TR1) unterstützen, stellen diese Funktion im Header tr1/cmath und im Namespace std::tr1 bereit.

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

Die zusätzlichen Überladungen müssen nicht exakt wie (A) bereitgestellt werden. Sie müssen lediglich sicherstellen, dass für ihr erstes Argument num1 und zweites Argument num2 :

  • Falls num1 oder num2 den Typ long double hat, dann hat std :: cyl_neumann ( num1, num2 ) denselben Effekt wie std :: cyl_neumann ( static_cast < long double > ( num1 ) ,
    static_cast < long double > ( num2 ) )
    .
  • Andernfalls, falls num1 und/oder num2 den Typ double oder einen Ganzzahltyp hat, dann hat std :: cyl_neumann ( num1, num2 ) denselben Effekt wie std :: cyl_neumann ( static_cast < double > ( num1 ) ,
    static_cast < double > ( num2 ) )
    .
  • Andernfalls, falls num1 oder num2 den Typ float hat, dann hat std :: cyl_neumann ( num1, num2 ) denselben Effekt wie std :: cyl_neumann ( static_cast < float > ( num1 ) ,
    static_cast < float > ( num2 ) )
    .
(bis C++23)

Falls num1 und num2 arithmetische Typen haben, dann hat std :: cyl_neumann ( num1, num2 ) denselben Effekt wie std :: cyl_neumann ( static_cast < /* common-floating-point-type */ > ( num1 ) ,
static_cast < /* common-floating-point-type */ > ( num2 ) )
, wobei /* common-floating-point-type */ der Gleitkommatyp mit dem höchsten Gleitkomma-Konvertierungsrang und der höchsten Gleitkomma-Konvertierungsunterrang zwischen den Typen von num1 und num2 ist; Argumente von Ganzzahltyp werden als mit demselben Gleitkomma-Konvertierungsrang wie double betrachtet.

Falls kein solcher Gleitkommatyp mit dem höchsten Rang und Unterrang existiert, dann führt die Überladungsauflösung nicht zu einem verwendbaren Kandidaten aus den bereitgestellten Überladungen.

(seit C++23)

Beispiel

#include <cassert>
#include <cmath>
#include <iostream>
#include <numbers>
const double π = std::numbers::pi; // oder std::acos(-1) vor C++20
// Um die zylindrische Neumann-Funktion über die zylindrische Bessel-Funktion erster Art
// zu berechnen, müssen wir J implementieren, da der direkte Aufruf von
// std::cyl_bessel_j(nu, x) gemäß obiger Formel
// für negatives nu 'std::domain_error': Bad argument in __cyl_bessel_j auslöst.
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 << "Stichproben für 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 << ", berechnet über J = " << j << '\n';
        assert(n == j);
    }
}

Ausgabe:

Stichproben für nu == 0.5
N_.5(+0.000000) = -inf, berechnet über J = -inf
N_.5(+0.333000) = -1.306713, berechnet über J = -1.306713
N_.5(+0.666000) = -0.768760, berechnet über J = -0.768760
N_.5(+0.999000) = -0.431986, berechnet über J = -0.431986
N_.5(+1.332000) = -0.163524, berechnet über J = -0.163524
N_.5(+1.665000) = +0.058165, berechnet über J = +0.058165
N_.5(+1.998000) = +0.233876, berechnet über J = +0.233876

Siehe auch

Reguläre modifizierte zylindrische Bessel-Funktionen
(Funktion)
Zylindrische Bessel-Funktionen (erster Art)
(Funktion)
Irreguläre modifizierte zylindrische Bessel-Funktionen
(Funktion)

Externe Links

Weisstein, Eric W. "Bessel Function of the Second Kind." Von MathWorld — Eine Wolfram Web Resource.