Package gov.nih.mipav.model.algorithms
Class Hypergeometric
java.lang.Object
gov.nih.mipav.model.algorithms.Hypergeometric
The 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) = sum from k = 0
to infinity of Poch(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
FieldsModifier and TypeFieldDescriptionprivate doubleInput parameterprivate doubleInput parameterprivate doubleInput argumentstatic final intprivate double[]private doublestatic final intprivate double[]outputted resultprivate doubleInput argumentprivate double[]Outputted resultprivate intTells whether real number or complex number versionprivate doubleInput argument -
Constructor Summary
ConstructorsConstructorDescriptionHypergeometric(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
Modifier and TypeMethodDescriptionprivate voidThis is a port of subroutine HYGFZ from Computation of Special Functions by Shanjie Zhang and Jianming Jin, pp. 380-385.voidfinalize()Cleanup memory.private voidThis is a port of subroutine HYGFX from Computation of Special Functions by Shanjie Zhang and Jianming Jin, pp. 376-379.voidrun()voidvoidprivate 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 Details
-
REAL_VERSION
public static final int REAL_VERSION- See Also:
-
COMPLEX_VERSION
public static final int COMPLEX_VERSION- See Also:
-
version
private int versionTells whether real number or complex number version -
a
private double aInput parameter -
b
private double bInput parameter -
c
private double cInput argument -
result
private double[] resultOutputted result -
x
private double xInput argument -
realZ
private double realZInput argument -
imagZ
private double imagZ -
realResult
private double[] realResultoutputted result -
imagResult
private double[] imagResult
-
-
Constructor Details
-
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 Details
-
finalize
Cleanup memory. -
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 invalid input: '<'= 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[]
-