Integer type:  int32  int64  nag_int  show int32  show int32  show int64  show int64  show nag_int  show nag_int

Chapter Contents
Chapter Introduction
NAG Toolbox

# NAG Toolbox: nag_specfun_psi_deriv_real (s14ae)

## Purpose

nag_specfun_psi_deriv_real (s14ae) returns the value of the k$k$th derivative of the psi function ψ(x)$\psi \left(x\right)$ for real x$x$ and k = 0,1,,6$k=0,1,\dots ,6$, via the function name.

## Syntax

[result, ifail] = s14ae(x, k)
[result, ifail] = nag_specfun_psi_deriv_real(x, k)

## Description

nag_specfun_psi_deriv_real (s14ae) evaluates an approximation to the k$k$th derivative of the psi function ψ(x)$\psi \left(x\right)$ given by
 ψ(k)(x) = (dk)/(dxk)ψ(x) = (dk)/(dxk) (d/(dx)logeΓ(x)) , $ψ (k) (x)=dkdxk ψ(x)=dkdxk (ddx loge⁡Γ(x) ) ,$
where x$x$ is real with x0,1,2,$x\ne 0,-1,-2,\dots \text{}$ and k = 0,1,,6$k=0,1,\dots ,6$. For negative noninteger values of x$x$, the recurrence relationship
 ψ(k)(x + 1) = ψ(k)(x) + (dk)/(dxk) (1/x) $ψ (k) (x+1)=ψ (k) (x)+dkdxk (1x)$
is used. The value of ((1)k + 1ψ(k)(x))/(k ! ) $\frac{{\left(-1\right)}^{k+1}{\psi }^{\left(k\right)}\left(x\right)}{k!}$ is obtained by a call to nag_specfun_polygamma_deriv (s14ad), which is based on the function PSIFN in Amos (1983).
Note that ψ(k)(x)${\psi }^{\left(k\right)}\left(x\right)$ is also known as the polygamma function. Specifically, ψ(0)(x)${\psi }^{\left(0\right)}\left(x\right)$ is often referred to as the digamma function and ψ(1)(x)${\psi }^{\left(1\right)}\left(x\right)$ as the trigamma function in the literature. Further details can be found in Abramowitz and Stegun (1972).

## References

Abramowitz M and Stegun I A (1972) Handbook of Mathematical Functions (3rd Edition) Dover Publications
Amos D E (1983) Algorithm 610: A portable FORTRAN subroutine for derivatives of the psi function ACM Trans. Math. Software 9 494–502

## Parameters

### Compulsory Input Parameters

1:     x – double scalar
The argument x$x$ of the function.
Constraint: x${\mathbf{x}}$ must not be ‘too close’ (see Section [Error Indicators and Warnings]) to a non-positive integer.
2:     k – int64int32nag_int scalar
The function ψ(k)(x)${\psi }^{\left(k\right)}\left(x\right)$ to be evaluated.
Constraint: 0k6$0\le {\mathbf{k}}\le 6$.

None.

None.

### Output Parameters

1:     result – double scalar
The result of the function.
2:     ifail – int64int32nag_int scalar
${\mathrm{ifail}}={\mathbf{0}}$ unless the function detects an error (see [Error Indicators and Warnings]).

## Error Indicators and Warnings

Errors or warnings detected by the function:
ifail = 1${\mathbf{ifail}}=1$
 On entry, k < 0${\mathbf{k}}<0$, or k > 6${\mathbf{k}}>6$, or x is ‘too close’ to a non-positive integer. That is, abs(x − nint(x)) < machine precision × nint(abs(x)) .
ifail = 2${\mathbf{ifail}}=2$
The evaluation has been abandoned due to the likelihood of underflow. The result is returned as zero.
ifail = 3${\mathbf{ifail}}=3$
The evaluation has been abandoned due to the likelihood of overflow. The result is returned as zero.

## Accuracy

All constants in nag_specfun_polygamma_deriv (s14ad) are given to approximately 18$18$ digits of precision. If t$t$ denotes the number of digits of precision in the floating point arithmetic being used, then clearly the maximum number in the results obtained is limited by p = min (t,18)$p=\mathrm{min}\phantom{\rule{0.125em}{0ex}}\left(t,18\right)$. Empirical tests by Amos (1983) have shown that the maximum relative error is a loss of approximately two decimal places of precision. Further tests with the function ψ(0)(x)$-{\psi }^{\left(0\right)}\left(x\right)$ have shown somewhat improved accuracy, except at points near the positive zero of ψ(0)(x)${\psi }^{\left(0\right)}\left(x\right)$ at x = 1.46$x=1.46\dots \text{}$, where only absolute accuracy can be obtained.

None.

## Example

```function nag_specfun_psi_deriv_real_example
x = 2.5;
k = int64(2);
[result, ifail] = nag_specfun_psi_deriv_real(x, k)
```
```

result =

-0.2362

ifail =

0

```
```function s14ae_example
x = 2.5;
k = int64(2);
[result, ifail] = s14ae(x, k)
```
```

result =

-0.2362

ifail =

0

```