Class Hypergeometric

java.lang.Object
gov.nih.mipav.model.algorithms.Hypergeometric

public class Hypergeometric extends Object

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

    Fields
    Modifier and Type
    Field
    Description
    private double
    Input parameter
    private double
    Input parameter
    private double
    Input argument
    static final int
     
    private double[]
     
    private double
     
    static final int
     
    private double[]
    outputted result
    private double
    Input argument
    private double[]
    Outputted result
    private int
    Tells whether real number or complex number version
    private double
    Input argument
  • Constructor Summary

    Constructors
    Constructor
    Description
     
    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

    Modifier and Type
    Method
    Description
    private void
    This is a port of subroutine HYGFZ from Computation of Special Functions by Shanjie Zhang and Jianming Jin, pp. 380-385.
    void
    Cleanup memory.
    private void
    This is a port of subroutine HYGFX from Computation of Special Functions by Shanjie Zhang and Jianming Jin, pp. 376-379.
    void
    run()
     
    void
     
    void
     
    private double
    zabs(double zr, double zi)
    zabs computes the absolute value or magnitude of a double precision complex variable zr + j*zi.
    private void
    zdiv(double ar, double ai, double br, double bi, double[] cr, double[] ci)
    complex divide c = a/b.
    private void
    zexp(double ar, double ai, double[] br, double[] bi)
    complex exponential function b = exp(a).
    private void
    zlog(double ar, double ai, double[] br, double[] bi, int[] ierr)
    complex logarithm b = clog(a).
    private void
    zmlt(double ar, double ai, double br, double bi, double[] cr, double[] ci)
    complex multiply c = a * b.
    private void
    zpow(double zr, double zi, double a, double[] br, double[] bi, int[] ierr)
    b = z**a = exp(a*log(z))
    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).
    private void
    zsqrt(double ar, double ai, double[] br, double[] bi)
    complex square root b = csqrt(a).

    Methods inherited from class java.lang.Object

    clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • 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 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 Details

    • Hypergeometric

      public Hypergeometric()
    • Hypergeometric

      public Hypergeometric(double a, double b, double c, double x, double[] result)
      Parameters:
      a - input parameter
      b - input parameter
      c - input parameter c must not equal 0, -1, -2, ...
      x - input argument
      result - outputted result
    • Hypergeometric

      public Hypergeometric(double a, double b, double c, double realZ, double imagZ, double[] realResult, double[] imagResult)
      Parameters:
      a - input real parameter
      b - input real parameter
      c - input real parameter c must not equal 0, -1, -2, ...
      realZ - input real part of argument
      imagZ - input imaginary part of argument
      realResult - real part of outputted result
      imagResult - imaginary part of outputted result
  • Method Details

    • finalize

      public void finalize() throws Throwable
      Cleanup memory.
      Overrides:
      finalize in class Object
      Throws:
      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 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 - double
      zi - 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 - double
      ai - double
      br - double
      bi - double
      cr - double[]
      ci - double[]
    • zexp

      private void zexp(double ar, double ai, double[] br, double[] bi)
      complex exponential function b = exp(a).
      Parameters:
      ar - double
      ai - double
      br - double[]
      bi - double[]
    • zlog

      private void zlog(double ar, double ai, double[] br, double[] bi, int[] ierr)
      complex logarithm b = clog(a).
      Parameters:
      ar - double
      ai - double
      br - 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 - double
      ai - double
      br - double
      bi - double
      cr - 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 - double
      zi - double
      cshr - 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 - double
      ai - double
      br - double[]
      bi - double[]