Namespaces
Variants

std:: comp_ellint_1, std:: comp_ellint_1f, std:: comp_ellint_1l

From cppreference.net
Definiert im Header <cmath>
(1)
double comp_ellint_1 ( double k ) ;

float comp_ellint_1 ( float k ) ;

long double comp_ellint_1 ( long double k ) ;
(seit C++17)
(bis C++23)
/* floating-point-type */ comp_ellint_1 ( /* floating-point-type */ k ) ;
(seit C++23)
float comp_ellint_1f ( float k ) ;
(2) (seit C++17)
long double comp_ellint_1l ( long double k ) ;
(3) (seit C++17)
Definiert im Header <cmath>
template < class Integer >
double comp_ellint_1 ( Integer k ) ;
(A) (seit C++17)
1-3) Berechnet das vollständige elliptische Integral erster Art von k . Die Bibliothek bietet Überladungen von std::comp_ellint_1 für alle cv-unqualifizierten Gleitkommatypen als Typ des Parameters k an. (seit C++23)
A) Zusätzliche Überladungen werden für alle Ganzzahltypen bereitgestellt, die als double behandelt werden.

Inhaltsverzeichnis

Parameter

k - elliptischer Modul oder Exzentrizität (ein Gleitkomma- oder Ganzzahlwert)

Rückgabewert

Wenn keine Fehler auftreten, wird der Wert des vollständigen elliptischen Integrals erster Art von k , also std:: ellint_1 ( k, π / 2 ) , zurückgegeben.

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 |k|>1 , kann ein Domänenfehler auftreten.

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 in (A) bereitgestellt werden. Sie müssen lediglich sicherstellen, dass für ihr Argument num vom Ganzzahltyp std :: comp_ellint_1 ( num ) dieselbe Wirkung hat wie std :: comp_ellint_1 ( static_cast < double > ( num ) ) .

Beispiel

Die Periode eines Pendels der Länge l , bei gegebener Erdbeschleunigung g und Anfangsauslenkung θ, beträgt 4⋅ l/g ⋅K(sin(θ/2)) , wobei K die Funktion std::comp_ellint_1 ist.

#include <cmath>
#include <iostream>
#include <numbers>
int main()
{
    constexpr double π{std::numbers::pi};
    std::cout << "K(0) ≈ " << std::comp_ellint_1(0) << '\n'
              << "π/2 ≈ " << π / 2 << '\n'
              << "K(0.5) ≈ " << std::comp_ellint_1(0.5) << '\n'
              << "F(0.5, π/2) ≈ " << std::ellint_1(0.5, π / 2) << '\n'
              << "The period of a pendulum length 1m at 10° initial angle ≈ "
              << 4 * std::sqrt(1 / 9.80665) * std::comp_ellint_1(std::sin(π / 18 / 2))
              << "s,\n" "whereas the linear approximation gives ≈ "
              << 2 * π * std::sqrt(1 / 9.80665) << '\n';
}

Ausgabe:

K(0) ≈ 1.5708
π/2 ≈ 1.5708
K(0.5) ≈ 1.68575
F(0.5, π/2) ≈ 1.68575
The period of a pendulum length 1 m at 10° initial angle ≈ 2.01024s,
whereas the linear approximation gives ≈ 2.00641

Siehe auch

(C++17) (C++17) (C++17)
(unvollständiges) elliptisches Integral erster Art
(Funktion)

Externe Links

Weisstein, Eric W. "Complete Elliptic Integral of the First Kind." Von MathWorld — Eine Wolfram Web Resource.