Class EllipticIntegral

java.lang.Object
de.tu_bs.isbs.util.math.EllipticIntegral

public class EllipticIntegral
extends java.lang.Object
Berechnet elliptische Integrale. Zur Berechnung werden Funktionen der SLATEC-Bibliothek verwendet.

Bietet Wrapper zum Aufruf der SLATEC-Funktionen für elliptische Integrale nach B. C. Carlson, RF, RJ, RC und RD, für den allgemeinen Fall sowie für die Spezialfälle vollständiger elliptischer Integrale.

Der Zusammenhang zwischen der Legendre-Form und der Carlson-Form für vollständige elliptische Integrale ist wie folgt:

       K(k)     = RF(0,1-k^2,1) ,
       E(k)     = K(k) - 1/3*k^2 * RD(0,1-k^2,1) ,
       PI(n, k) = K(k) + 1/3*n   * RJ(0,1-k^2,1,1-n) .
 

Hinweise: Die Legendre-Formen E, K, PI sollten möglichst vermieden werden. Stattdessen ist es ratsam, ein vorliegendes Problem so zu transformieren, dass es sich in Form der numerisch besser zu berechnenden Carlson-Integrale RF, RJ, RD, RC ausdrücken lässt.

Mit Gleitpunktarithmetik ist es im Allgemeinen nicht möglich, Werte wie "k" und "1-k^2" sowie "n" und "1-n" ohne Genauigkeitsverlust ineinander umzurechnen und insbesondere in Fällen, in denen beide zugleich benötigt werden, diese auch mit vergleichbarer Genauigkeit vorliegen zu haben. Besonders Formeln, in denen Summen aus K, E und PI vorkommen, neigen dann dazu, Fehler in ihren Parametern überproportional zu verstärken.

Details: Siehe die Dokumentation in den Fortran-Quellen oder in den Java-Versionen im Package netlib.slatec. Dort ist jeweils vermerkt, welche speziellen Funktionen sich in Form von RF, RD, RJ, RC ausdrücken lassen. Insbesondere RC eignet sich auch zur Berechnung des natürlichen Logarithmus, der inversen trigonometischen Funktionen und der Areafunktionen (die man in der Praxis natürlich alle besser mit der Standard-Math-Klasse berechnet).

 Original-Fortran-Quellen:
    http://www.netlib.org/slatec/src/drf.f
    http://www.netlib.org/slatec/src/drj.f
    http://www.netlib.org/slatec/src/drc.f
    http://www.netlib.org/slatec/src/drd.f
 

Zur SLATEC-Fehlerbehandlung und zu SlatecExceptions siehe Xermsg.

Author:
Stefan Reiser
  • Method Summary

    Modifier and Type Method Description
    static void main​(java.lang.String[] args)
    Test...
    static double RC​(double X, double Y)
    Calls DRC from SLATEC.
    static double RD​(double Y)
    Calls DRD from SLATEC, special case RD(0,Y,1).
    static double RD​(double X, double Y, double Z)
    Calls DRD from SLATEC.
    static double RF​(double Y)
    Calls DRF from SLATEC, special case RF(0,Y,1).
    static double RF​(double X, double Y, double Z)
    Calls DRF from SLATEC.
    static double RJ​(double Y, double P)
    Calls DRJ from SLATEC, special case RJ(0,Y,1,P).
    static double RJ​(double X, double Y, double Z, double P)
    Calls DRJ from SLATEC.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Method Details

    • RJ

      public static double RJ​(double Y, double P) throws Xermsg.SlatecException
      Calls DRJ from SLATEC, special case RJ(0,Y,1,P).
      Parameters:
      Y -
      P -
      Returns:
      RJ(0,Y,1,P), NaN if either Y or P is NaN.
      Throws:
      Xermsg.SlatecException - if parameters out of range.
    • RF

      public static double RF​(double Y) throws Xermsg.SlatecException
      Calls DRF from SLATEC, special case RF(0,Y,1).
      Parameters:
      Y -
      Returns:
      RF(0,Y,1), NaN if Y is NaN.
      Throws:
      Xermsg.SlatecException - if parameter out of range.
    • RD

      public static double RD​(double Y) throws Xermsg.SlatecException
      Calls DRD from SLATEC, special case RD(0,Y,1).
      Parameters:
      Y -
      Returns:
      RD(0,Y,1), NaN if Y is NaN.
      Throws:
      Xermsg.SlatecException - if parameter out of range.
    • RJ

      public static double RJ​(double X, double Y, double Z, double P) throws Xermsg.SlatecException
      Calls DRJ from SLATEC.
      Parameters:
      X -
      Y -
      Z -
      P -
      Returns:
      RJ(X,Y,Y,P), NaN if either parameter is NaN.
      Throws:
      Xermsg.SlatecException - if parameters out of range.
    • RF

      public static double RF​(double X, double Y, double Z) throws Xermsg.SlatecException
      Calls DRF from SLATEC.
      Parameters:
      X -
      Y -
      Z -
      Returns:
      RF(X,Y,Z), NaN if either parameter is NaN.
      Throws:
      Xermsg.SlatecException - if parameters out of range.
    • RD

      public static double RD​(double X, double Y, double Z) throws Xermsg.SlatecException
      Calls DRD from SLATEC.
      Parameters:
      X -
      Y -
      Z -
      Returns:
      RD(X,Y,Z), NaN if either parameter is NaN.
      Throws:
      Xermsg.SlatecException - if parameters out of range.
    • RC

      public static double RC​(double X, double Y) throws Xermsg.SlatecException
      Calls DRC from SLATEC.
      Parameters:
      X -
      Y -
      Returns:
      RC(X,Y), NaN if either parameter is NaN.
      Throws:
      Xermsg.SlatecException - if parameters out of range.
    • main

      public static void main​(java.lang.String[] args) throws Xermsg.SlatecException
      Test...
      Parameters:
      args - -
      Throws:
      Xermsg.SlatecException