Namespaces
Variants

std:: cyl_bessel_i, std:: cyl_bessel_if, std:: cyl_bessel_il

From cppreference.net
Definiert im Header <cmath>
(1)
float cyl_bessel_i ( float nu, float x ) ;

double cyl_bessel_i ( double nu, double x ) ;

long double cyl_bessel_i ( long double nu, long double x ) ;
(seit C++17)
(bis C++23)
/* floating-point-type */ cyl_bessel_i ( /* floating-point-type */ nu,
/* floating-point-type */ x ) ;
(seit C++23)
float cyl_bessel_if ( float nu, float x ) ;
(2) (seit C++17)
long double cyl_bessel_il ( long double nu, long double x ) ;
(3) (seit C++17)
Definiert im Header <cmath>
template < class Arithmetic1, class Arithmetic2 >

/* common-floating-point-type */

cyl_bessel_i ( Arithmetic1 nu, Arithmetic2 x ) ;
(A) (seit C++17)
1-3) Berechnet die reguläre modifizierte zylindrische Bessel-Funktion von nu und x . Die Bibliothek stellt Überladungen von std::cyl_bessel_i für alle cv-unqualifizierten Gleitkommatypen als Typ der Parameter nu und x bereit. (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 regular modified cylindrical Bessel function of nu and x , that is I nu (x) = Σ
k=0
(x/2) nu+2k
k!Γ(nu+k+1)
(for x ≥ 0 ), is returned.

Fehlerbehandlung

Fehler können gemäß den Angaben in math_errhandling 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__ von der Implementierung auf einen Wert von mindestens 201003L definiert wird und wenn der Benutzer __STDCPP_WANT_MATH_SPEC_FUNCS__ definiert, bevor er 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 in boost.math verfügbar .

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_bessel_i ( num1, num2 ) denselben Effekt wie std :: cyl_bessel_i ( 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_bessel_i ( num1, num2 ) denselben Effekt wie std :: cyl_bessel_i ( static_cast < double > ( num1 ) ,
    static_cast < double > ( num2 ) )
    .
  • Andernfalls, falls num1 oder num2 den Typ float hat, dann hat std :: cyl_bessel_i ( num1, num2 ) denselben Effekt wie std :: cyl_bessel_i ( static_cast < float > ( num1 ) ,
    static_cast < float > ( num2 ) )
    .
(bis C++23)

Falls num1 und num2 arithmetische Typen haben, dann hat std :: cyl_bessel_i ( num1, num2 ) denselben Effekt wie std :: cyl_bessel_i ( 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 Überladenauflösung nicht zu einem verwendbaren Kandidaten aus den bereitgestellten Überladungen.

(seit C++23)

Beispiel

#include <cmath>
#include <iostream>
int main()
{
    // Stichprobe für nu == 0
    const double x = 1.2345;
    std::cout << "I_0(" << x << ") = " << std::cyl_bessel_i(0, x) << '\n';
    // Reihenentwicklung für I_0
    double fct = 1;
    double sum = 0;
    for (int k = 0; k < 5; fct *= ++k)
    {
        sum += std::pow(x / 2, 2 * k) / std::pow(fct, 2);
        std::cout << "sum = " << sum << '\n';
    }
}

Ausgabe:

I_0(1.2345) = 1.41886
sum = 1
sum = 1.381
sum = 1.41729
sum = 1.41882
sum = 1.41886

Siehe auch

Zylinder-Bessel-Funktionen (erster Art)
(Funktion)

Externe Links

Weisstein, Eric W. "Modifizierte Bessel-Funktion erster Art." Von MathWorld — Eine Wolfram Web Resource.