s14ad returns a sequence of values of scaled derivatives of the psi function $\psi \left(x\right)$ (also known as the digamma function).

# Syntax

C#
```public static void s14ad(
double x,
int n,
int m,
double[] ans,
out int ifail
)```
Visual Basic
```Public Shared Sub s14ad ( _
x As Double, _
n As Integer, _
m As Integer, _
ans As Double(), _
<OutAttribute> ByRef ifail As Integer _
)```
Visual C++
```public:
double x,
int n,
int m,
array<double>^ ans,
[OutAttribute] int% ifail
)```
F#
```static member s14ad :
x : float *
n : int *
m : int *
ans : float[] *
ifail : int byref -> unit
```

#### Parameters

x
Type: System..::..Double
On entry: the argument $x$ of the function.
Constraint: ${\mathbf{x}}>0.0$.
n
Type: System..::..Int32
On entry: the index of the first member $n$ of the sequence of functions.
Constraint: ${\mathbf{n}}\ge 0$.
m
Type: System..::..Int32
On entry: the number of members $m$ required in the sequence $w\left(\mathit{k},x\right)$, for $\mathit{k}=n,\dots ,n+m-1$.
Constraint: ${\mathbf{m}}\ge 1$.
ans
Type: array<System..::..Double>[]()[][]
An array of size [m]
On exit: the first $m$ elements of ans contain the required values $w\left(\mathit{k},x\right)$, for $\mathit{k}=n,\dots ,n+m-1$.
ifail
Type: System..::..Int32%
On exit: ${\mathbf{ifail}}={0}$ unless the method detects an error or a warning has been flagged (see [Error Indicators and Warnings]).

# Description

s14ad computes $m$ values of the function
 $wk,x=-1k+1ψkxk!,$
for $x>0$, $k=n$, $n+1,\dots ,n+m-1$, where $\psi$ is the psi function
 $ψx=ddxln Γx=Γ′xΓx,$
and ${\psi }^{\left(k\right)}$ denotes the $k$th derivative of $\psi$.
The method is derived from the method PSIFN in Amos (1983). The basic method of evaluation of $w\left(k,x\right)$ is the asymptotic series
 $wk,x∼εk,x+12xk+1+1xk∑j=1∞B2j2j+k-1!2j!k!x2j$
for large $x$ greater than a machine-dependent value ${x}_{\mathrm{min}}$, followed by backward recurrence using
 $wk,x=wk,x+1+x-k-1$
for smaller values of $x$, where $\epsilon \left(k,x\right)=-\mathrm{ln} x$ when $k=0$, $\epsilon \left(k,x\right)=\frac{1}{k{x}^{k}}$ when $k>0$, and ${B}_{2j}$, $j=1,2,\dots$, are the Bernoulli numbers.
When $k$ is large, the above procedure may be inefficient, and the expansion
 $wk,x=∑j=1∞1x+jk+1,$
which converges rapidly for large $k$, is used instead.

# 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

# Error Indicators and Warnings

Errors or warnings detected by the method:
${\mathbf{ifail}}=1$
 On entry, ${\mathbf{x}}\le 0.0$.
${\mathbf{ifail}}=2$
 On entry, ${\mathbf{n}}<0$.
${\mathbf{ifail}}=3$
 On entry, ${\mathbf{m}}<1$.
${\mathbf{ifail}}=4$
No results are returned because underflow is likely. Either x or ${\mathbf{n}}+{\mathbf{m}}-1$ is too large. If possible, reduce the value of m and call s14ad again.
${\mathbf{ifail}}=5$
No results are returned because overflow is likely. Either x is too small, or ${\mathbf{n}}+{\mathbf{m}}-1$ is too large. If possible, reduce the value of m and call s14ad again.
${\mathbf{ifail}}=6$
No results are returned because there is not enough internal workspace to continue computation. ${\mathbf{n}}+{\mathbf{m}}-1$ may be too large. If possible, reduce the value of m and call s14ad again.
${\mathbf{ifail}}=-9000$
An error occured, see message report.
${\mathbf{ifail}}=-8000$
Negative dimension for array $〈\mathit{\text{value}}〉$
${\mathbf{ifail}}=-6000$
Invalid Parameters $〈\mathit{\text{value}}〉$

# Accuracy

All constants in s14ad are given to approximately $18$ digits of precision. Calling the number of digits of precision in the floating-point arithmetic being used $t$, then clearly the maximum number of correct digits in the results obtained is limited by $p=\mathrm{min}\phantom{\rule{0.125em}{0ex}}\left(t,18\right)$. Empirical tests of s14ad, taking values of $x$ in the range $0.0, and $n$ in the range $1\le n\le 50$, have shown that the maximum relative error is a loss of approximately two decimal places of precision. Tests with $n=0$, i.e., testing the function $-\psi \left(x\right)$, have shown somewhat better accuracy, except at points close to the zero of $\psi \left(x\right)$, $x\simeq 1.461632$, where only absolute accuracy can be obtained.

# Parallelism and Performance

None.

The time taken for a call of s14ad is approximately proportional to $m$, plus a constant. In general, it is much cheaper to call s14ad with $m$ greater than $1$ to evaluate the function $w\left(\mathit{k},x\right)$, for $\mathit{k}=n,\dots ,n+m-1$, rather than to make $m$ separate calls of s14ad.

# Example

This example reads values of the argument $x$ from a file, evaluates the function at each value of $x$ and prints the results.