[Rd] digamma with negative arguments (PR#6626)
maechler at stat.math.ethz.ch
maechler at stat.math.ethz.ch
Tue Mar 2 17:31:10 MET 2004
I intend to look into this :
>>>>> "cspark" == cspark <cspark at ces.clemson.edu>
>>>>> on Sun, 29 Feb 2004 22:15:02 +0100 (CET) writes:
cspark> Full_Name: Chanseok Park
cspark> digamma with any negative value does not give a right answer.
cspark> It gives -1.797693e+308 for any negative arguments.
cspark> For example, digamma(-1.1) gives -1.797693e+308.
cspark> The right answer should be 10.15416
cspark> This bug can be easily fixed by using the following digamma identity.
cspark> digamma(x) = digamma(1-x) - pi/tan(pi*x) ## if x is negative
>> digamma(-1)
cspark> [1] -1.797693e+308
cspark> ## if we use the above math identity, we have the right answer
cspark> ## for any negative arguments.
>>
>> x= -1.1
>> digamma(1-x) - pi/tan(pi*x) ## if x is negative
cspark> [1] 10.15416
>>
and there are similar "reflection formulae" for trigamma() etc.
which I'd want as well.
As a matter of fact, our internal code src/nmath/polygamma.c
uses the basic workhorse dpsifn() which provides "arbitrary"
derivatives of the psi() { == digamma() } function {for positive x}.
dpsifn() needs input/output arrays in general,
static void
dpsifn(double x, int n, int kode, int m, double *ans, int *nz, int *ierr)
but I think it would still be worth to remove "static", add
documentation in R-ext.texi and hence add it to the API.
Another step would be an R-level interface; maybe with
digamma(x, deriv = 0)
^^^^^^^^^
with obvious meaning and implementation.
Feedback ?
{divert from R-bugs to R-devel, please !}
Martin Maechler <maechler at stat.math.ethz.ch> http://stat.ethz.ch/~maechler/
Seminar fuer Statistik, ETH-Zentrum LEO C16 Leonhardstr. 27
ETH (Federal Inst. Technology) 8092 Zurich SWITZERLAND
phone: x-41-1-632-3408 fax: ...-1228 <><
More information about the R-devel
mailing list