Namensräume
Varianten
Aktionen

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

Von cppreference.com
 
 
 
 
Definiert in der Header-Datei <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 in der Header-Datei <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 stellt Überladungen von std::comp_ellint_1 für alle nicht-cv-qualifizierten Gleitkommatypen als Typ des Parameters k bereit.(seit C++23)
A) Zusätzliche Überladungen werden für alle ganzzahligen Typen bereitgestellt, die als double behandelt werden.

Inhalt

[bearbeiten] Parameter

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

[bearbeiten] Rückgabewert

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

[bearbeiten] Fehlerbehandlung

Fehler können wie in math_errhandling angegeben gemeldet werden.

  • Wenn das Argument NaN ist, wird NaN zurückgegeben und kein Domänenfehler gemeldet.
  • Wenn |k|>1, kann ein Domänenfehler auftreten.

[bearbeiten] 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 beliebige Standardbibliotheks-Header einschließt.

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

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

Die zusätzlichen Überladungen müssen nicht genau als (A) bereitgestellt werden. Sie müssen nur ausreichen, um sicherzustellen, dass für ihr Argument num vom Ganzzahltyp std::comp_ellint_1(num) die gleiche Wirkung hat wie std::comp_ellint_1(static_cast<double>(num)).

[bearbeiten] Beispiel

Die Periode eines Pendels der Länge l, bei gegebener Erdbeschleunigung g und Anfangswinkel θ, ist gleich 4⋅l/g⋅K(sin(θ/2)), wobei K 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

[bearbeiten] Siehe auch

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

[bearbeiten] Externe Links

Weisstein, Eric W. "Complete Elliptic Integral of the First Kind." Von MathWorld – Eine Wolfram-Webressource.