Package jdistlib.math

Class PolyGamma

java.lang.Object
jdistlib.math.PolyGamma

public class PolyGamma extends Object
  Mathlib : A C Library of Special Functions
  Copyright (C) 1998 Ross Ihaka
  Copyright (C) 2000-2007 the R Development Core Team
  Copyright (C) 2004        The R Foundation

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program; if not, a copy is available at
  http://www.r-project.org/Licenses/

  SYNOPSIS

    #include <Rmath.h>
    double[] dpsifn(double x, int n, int kode, int m)
    double digamma(double x);
    double trigamma(double x)
    double tetragamma(double x)
    double pentagamma(double x)
    double psigamma(double x, double n)

  DESCRIPTION

    Compute the derivatives of the psi function
    and polygamma functions.

    The following definitions are used in dpsifn:

    Definition 1

         psi(x) = d/dx (ln(gamma(x)),  the first derivative of
                                       the log gamma function.

    Definition 2
                     k   k
         psi(k,x) = d /dx (psi(x)),    the k-th derivative
                                       of psi(x).


    "dpsifn" computes a sequence of scaled derivatives of
    the psi function; i.e. for fixed x and m it computes
    the m-member sequence

                  (-1)^(k+1) / gamma(k+1) * psi(k,x)
                     for k = n,...,n+m-1

    where psi(k,x) is as defined above.   For kode=1, dpsifn
    returns the scaled derivatives as described.  kode=2 is
    operative only when k=0 and in that case dpsifn returns
    -psi(x) + ln(x).    That is, the logarithmic behavior for
    large x is removed when kode=2 and k=0.  When sums or
    differences of psi functions are computed the logarithmic
    terms can be combined analytically and computed separately
    to help retain significant digits.

    Note that dpsifn(x, 0, 1, 1, ans) results in ans = -psi(x).

  INPUT

        x     - argument, x > 0.

        n     - first member of the sequence, 0 <= n <= 100
                n == 0 gives ans(1) = -psi(x)       for kode=1
                                      -psi(x)+ln(x) for kode=2

        kode  - selection parameter
                kode == 1 returns scaled derivatives of the
                psi function.
                kode == 2 returns scaled derivatives of the
                psi function except when n=0. In this case,
                ans(1) = -psi(x) + ln(x) is returned.

        m     - number of members of the sequence, m >= 1

  OUTPUT

        ans   - a vector of length at least m whose first m
                components contain the sequence of derivatives
                scaled according to kode.

        nz    - underflow flag
                nz == 0, a normal return
                nz != 0, underflow, last nz components of ans are
                         set to zero, ans(m-k+1)=0.0, k=1,...,nz

        ierr  - error flag
                ierr=0, a normal return, computation completed
                ierr=1, input error,     no computation
                ierr=2, overflow,        x too small or n+m-1 too
                        large or both
                ierr=3, error,           n too large. dimensioned
                        array trmr(nmax) is not large enough for n

    The nominal computational accuracy is the maximum of unit
    roundoff (d1mach(4)) and 1e-18 since critical constants
    are given to only 18 digits.

    The basic method of evaluation is the asymptotic expansion
    for large x >= xmin followed by backward recursion on a two
    term recursion relation

             w(x+1) + x^(-n-1) = w(x).

    this is supplemented by a series

             sum( (x+k)^(-n-1) , k=0,1,2,... )

    which converges rapidly for large n. both xmin and the
    number of terms of the series are calculated from the unit
    roundoff of the machine environment.

  AUTHOR

    Amos, D. E.         (Fortran)
    Ross Ihaka          (C Translation)
    Martin Maechler   (x < 0, and psigamma())
    Roby Joehanes (Java translation)

  REFERENCES

    Handbook of Mathematical Functions,
    National Bureau of Standards Applied Mathematics Series 55,
    Edited by M. Abramowitz and I. A. Stegun, equations 6.3.5,
    6.3.18, 6.4.6, 6.4.9 and 6.4.10, pp.258-260, 1964.

    D. E. Amos, (1983). "A Portable Fortran Subroutine for
    Derivatives of the Psi Function", Algorithm 610,
    TOMS 9(4), pp. 494-502.

 
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    static final double
    digamma(double x)
     
    static final double[]
    digamma(double[] x)
     
    static final double[]
    dpsifn(double x, int n, int kode, int m)
     
    static final double
    lmvpsigammafn(double a, int p, int deriv)
    Log of multivariate psigamma function By: Roby Joehanes
    static final double
    pentagamma(double x)
     
    static final double[]
    pentagamma(double[] x)
     
    static final double[]
    psigamma(double[] x, int deriv)
     
    static final double
    psigamma(double x, int n)
     
    static final double
    tetragamma(double x)
     
    static final double[]
    tetragamma(double[] x)
     
    static final double
    trigamma(double x)
     
    static final double[]
    trigamma(double[] x)
     

    Methods inherited from class java.lang.Object

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

    • PolyGamma

      public PolyGamma()
  • Method Details

    • dpsifn

      public static final double[] dpsifn(double x, int n, int kode, int m)
    • psigamma

      public static final double psigamma(double x, int n)
    • digamma

      public static final double digamma(double x)
    • trigamma

      public static final double trigamma(double x)
    • tetragamma

      public static final double tetragamma(double x)
    • pentagamma

      public static final double pentagamma(double x)
    • psigamma

      public static final double[] psigamma(double[] x, int deriv)
    • digamma

      public static final double[] digamma(double[] x)
    • trigamma

      public static final double[] trigamma(double[] x)
    • tetragamma

      public static final double[] tetragamma(double[] x)
    • pentagamma

      public static final double[] pentagamma(double[] x)
    • lmvpsigammafn

      public static final double lmvpsigammafn(double a, int p, int deriv)
      Log of multivariate psigamma function By: Roby Joehanes
      Parameters:
      a -
      p - the dimension or order
      deriv - digamma = 0, trigamma = 1, ... etc.
      Returns:
      log multivariate psigamma