Package gov.nih.mipav.model.algorithms
Class Hypergeometric
- java.lang.Object
-
- gov.nih.mipav.model.algorithms.Hypergeometric
-
public class Hypergeometric extends java.lang.ObjectThe function
2F1(a,b,c,x)is the hypergeometric function or Gauss's hypergeometric function.The
Pochhammer(a,b) = Gamma(a+b)/Gamma(a)2F1(a,b,c,x) = sumfromk = 0to infinity ofPoch(a,k)*Poch(b,k)*z**k/(k! * Poch(c,k))It is the solution of the hypergeometric differential equation:
z(1-z)y" + [c-(a+b+1)z]y' - aby = 0
The FORTRAN code this class is based upon is from Computation of Special Functions by Shanjie Zhang and Jianming Jin and copyright 1996 John Wiley & Sons, Inc.
From the diskette that the FORTRAN code came on:
DISCLAIMER OF WARRANTY Although we have made a great effort to test and validate the computer programs, we make no warranties, express or implied, that these programs are free of error, or are consistent with any particular standard of merchantability, or that they will meet your requirements for any particular application. They should not be relied on for solving problems whose incorrect solution could result in injury to a person or loss of property. If you do use the programs in such a manner, it is at your own risk. The authors and publisher disclaim all liability for direct or consequential damages resulting from your use of the programs.
-
-
Field Summary
Fields Modifier and Type Field Description private doubleaInput parameterprivate doublebInput parameterprivate doublecInput argumentstatic intCOMPLEX_VERSIONprivate double[]imagResultprivate doubleimagZstatic intREAL_VERSIONprivate double[]realResultoutputted resultprivate doublerealZInput argumentprivate double[]resultOutputted resultprivate intversionTells whether real number or complex number versionprivate doublexInput argument
-
Constructor Summary
Constructors Constructor Description Hypergeometric()Hypergeometric(double a, double b, double c, double x, double[] result)Hypergeometric(double a, double b, double c, double realZ, double imagZ, double[] realResult, double[] imagResult)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private voidcomplexArgument()This is a port of subroutine HYGFZ from Computation of Special Functions by Shanjie Zhang and Jianming Jin, pp. 380-385.voidfinalize()Cleanup memory.private voidrealArgument()This is a port of subroutine HYGFX from Computation of Special Functions by Shanjie Zhang and Jianming Jin, pp. 376-379.voidrun()voidtestcomplexArgument()voidtestrealArgument()private doublezabs(double zr, double zi)zabs computes the absolute value or magnitude of a double precision complex variable zr + j*zi.private voidzdiv(double ar, double ai, double br, double bi, double[] cr, double[] ci)complex divide c = a/b.private voidzexp(double ar, double ai, double[] br, double[] bi)complex exponential function b = exp(a).private voidzlog(double ar, double ai, double[] br, double[] bi, int[] ierr)complex logarithm b = clog(a).private voidzmlt(double ar, double ai, double br, double bi, double[] cr, double[] ci)complex multiply c = a * b.private voidzpow(double zr, double zi, double a, double[] br, double[] bi, int[] ierr)b = z**a = exp(a*log(z))private voidzshch(double zr, double zi, double[] cshr, double[] cshi, double[] cchr, double[] cchi)zshch computes the complex hyperbolic functions csh = sinh(x+i*y) and cch = cosh(x+i*y).private voidzsqrt(double ar, double ai, double[] br, double[] bi)complex square root b = csqrt(a).
-
-
-
Field Detail
-
REAL_VERSION
public static final int REAL_VERSION
- See Also:
- Constant Field Values
-
COMPLEX_VERSION
public static final int COMPLEX_VERSION
- See Also:
- Constant Field Values
-
version
private int version
Tells whether real number or complex number version
-
a
private double a
Input parameter
-
b
private double b
Input parameter
-
c
private double c
Input argument
-
result
private double[] result
Outputted result
-
x
private double x
Input argument
-
realZ
private double realZ
Input argument
-
imagZ
private double imagZ
-
realResult
private double[] realResult
outputted result
-
imagResult
private double[] imagResult
-
-
Constructor Detail
-
Hypergeometric
public Hypergeometric()
-
Hypergeometric
public Hypergeometric(double a, double b, double c, double x, double[] result)- Parameters:
a- input parameterb- input parameterc- input parameter c must not equal 0, -1, -2, ...x- input argumentresult- outputted result
-
Hypergeometric
public Hypergeometric(double a, double b, double c, double realZ, double imagZ, double[] realResult, double[] imagResult)- Parameters:
a- input real parameterb- input real parameterc- input real parameter c must not equal 0, -1, -2, ...realZ- input real part of argumentimagZ- input imaginary part of argumentrealResult- real part of outputted resultimagResult- imaginary part of outputted result
-
-
Method Detail
-
finalize
public void finalize() throws java.lang.ThrowableCleanup memory.- Overrides:
finalizein classjava.lang.Object- Throws:
java.lang.Throwable- DOCUMENT ME!
-
run
public void run()
-
testrealArgument
public void testrealArgument()
-
testcomplexArgument
public void testcomplexArgument()
-
realArgument
private void realArgument()
This is a port of subroutine HYGFX from Computation of Special Functions by Shanjie Zhang and Jianming Jin, pp. 376-379. c != 0, -1, -2 x <= 1
-
complexArgument
private void complexArgument()
This is a port of subroutine HYGFZ from Computation of Special Functions by Shanjie Zhang and Jianming Jin, pp. 380-385.
-
zpow
private void zpow(double zr, double zi, double a, double[] br, double[] bi, int[] ierr)b = z**a = exp(a*log(z))- Parameters:
zr-zi-a-br-bi-ierr-
-
zabs
private double zabs(double zr, double zi)zabs computes the absolute value or magnitude of a double precision complex variable zr + j*zi.- Parameters:
zr- doublezi- double- Returns:
- double
-
zdiv
private void zdiv(double ar, double ai, double br, double bi, double[] cr, double[] ci)complex divide c = a/b.- Parameters:
ar- doubleai- doublebr- doublebi- doublecr- double[]ci- double[]
-
zexp
private void zexp(double ar, double ai, double[] br, double[] bi)complex exponential function b = exp(a).- Parameters:
ar- doubleai- doublebr- double[]bi- double[]
-
zlog
private void zlog(double ar, double ai, double[] br, double[] bi, int[] ierr)complex logarithm b = clog(a).- Parameters:
ar- doubleai- doublebr- double[]bi- double[]ierr- int[] ierr = 0, normal return ierr = 1, z = cmplx(0.0, 0.0)
-
zmlt
private void zmlt(double ar, double ai, double br, double bi, double[] cr, double[] ci)complex multiply c = a * b.- Parameters:
ar- doubleai- doublebr- doublebi- doublecr- double[]ci- double[]
-
zshch
private void zshch(double zr, double zi, double[] cshr, double[] cshi, double[] cchr, double[] cchi)zshch computes the complex hyperbolic functions csh = sinh(x+i*y) and cch = cosh(x+i*y).- Parameters:
zr- doublezi- doublecshr- double[]cshi- double[]cchr- double[]cchi- double[]
-
zsqrt
private void zsqrt(double ar, double ai, double[] br, double[] bi)complex square root b = csqrt(a).- Parameters:
ar- doubleai- doublebr- double[]bi- double[]
-
-