Class EllipticIntegral
public class EllipticIntegral
extends java.lang.Object
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.
-
Method Details
-
RJ
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
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
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
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
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
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
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
Test...- Parameters:
args
- -- Throws:
Xermsg.SlatecException
-