NAG Library Routine Document
e01bef (dim1_monotonic)
1
Purpose
e01bef computes a monotonicitypreserving piecewise cubic Hermite interpolant to a set of data points.
2
Specification
Fortran Interface
Integer, Intent (In)  ::  n  Integer, Intent (Inout)  ::  ifail  Real (Kind=nag_wp), Intent (In)  ::  x(n), f(n)  Real (Kind=nag_wp), Intent (Out)  ::  d(n) 

C Header Interface
#include nagmk26.h
void 
e01bef_ (const Integer *n, const double x[], const double f[], double d[], Integer *ifail) 

3
Description
e01bef estimates first derivatives at the set of data points
$\left({x}_{\mathit{r}},{f}_{\mathit{r}}\right)$, for
$\mathit{r}=1,2,\dots ,n$, which determine a piecewise cubic Hermite interpolant to the data, that preserves monotonicity over ranges where the data points are monotonic. If the data points are only piecewise monotonic, the interpolant will have an extremum at each point where monotonicity switches direction. The estimates of the derivatives are computed by a formula due to Brodlie,
which is described in
Fritsch and Butland (1984), with suitable changes at the boundary points.
The routine is derived from routine PCHIM in
Fritsch (1982).
Values of the computed interpolant, and of its first derivative and definite integral, can subsequently be computed by calling
e01bff,
e01bgf and
e01bhf, as described in
Section 9.
4
References
Fritsch F N (1982) PCHIP final specifications Report UCID30194 Lawrence Livermore National Laboratory
Fritsch F N and Butland J (1984) A method for constructing local monotone piecewise cubic interpolants SIAM J. Sci. Statist. Comput. 5 300–304
5
Arguments
 1: $\mathbf{n}$ – IntegerInput

On entry: $n$, the number of data points.
Constraint:
${\mathbf{n}}\ge 2$.
 2: $\mathbf{x}\left({\mathbf{n}}\right)$ – Real (Kind=nag_wp) arrayInput

On entry: ${\mathbf{x}}\left(\mathit{r}\right)$ must be set to ${x}_{\mathit{r}}$, the $\mathit{r}$th value of the independent variable (abscissa), for $\mathit{r}=1,2,\dots ,n$.
Constraint:
${\mathbf{x}}\left(r\right)<{\mathbf{x}}\left(r+1\right)$.
 3: $\mathbf{f}\left({\mathbf{n}}\right)$ – Real (Kind=nag_wp) arrayInput

On entry: ${\mathbf{f}}\left(\mathit{r}\right)$ must be set to ${f}_{\mathit{r}}$, the $\mathit{r}$th value of the dependent variable (ordinate), for $\mathit{r}=1,2,\dots ,n$.
 4: $\mathbf{d}\left({\mathbf{n}}\right)$ – Real (Kind=nag_wp) arrayOutput

On exit: estimates of derivatives at the data points. ${\mathbf{d}}\left(r\right)$ contains the derivative at ${\mathbf{x}}\left(r\right)$.
 5: $\mathbf{ifail}$ – IntegerInput/Output

On entry:
ifail must be set to
$0$,
$1\text{ or}1$. If you are unfamiliar with this argument you should refer to
Section 3.4 in How to Use the NAG Library and its Documentation for details.
For environments where it might be inappropriate to halt program execution when an error is detected, the value
$1\text{ or}1$ is recommended. If the output of error messages is undesirable, then the value
$1$ is recommended. Otherwise, if you are not familiar with this argument, the recommended value is
$0$.
When the value $\mathbf{1}\text{ or}\mathbf{1}$ is used it is essential to test the value of ifail on exit.
On exit:
${\mathbf{ifail}}={\mathbf{0}}$ unless the routine detects an error or a warning has been flagged (see
Section 6).
6
Error Indicators and Warnings
If on entry
${\mathbf{ifail}}=0$ or
$1$, explanatory error messages are output on the current error message unit (as defined by
x04aaf).
Errors or warnings detected by the routine:
 ${\mathbf{ifail}}=1$

On entry,  ${\mathbf{n}}<2$. 
 ${\mathbf{ifail}}=2$

The values of ${\mathbf{x}}\left(\mathit{r}\right)$, for $\mathit{r}=1,2,\dots ,{\mathbf{n}}$, are not in strictly increasing order.
 ${\mathbf{ifail}}=99$
An unexpected error has been triggered by this routine. Please
contact
NAG.
See
Section 3.9 in How to Use the NAG Library and its Documentation for further information.
 ${\mathbf{ifail}}=399$
Your licence key may have expired or may not have been installed correctly.
See
Section 3.8 in How to Use the NAG Library and its Documentation for further information.
 ${\mathbf{ifail}}=999$
Dynamic memory allocation failed.
See
Section 3.7 in How to Use the NAG Library and its Documentation for further information.
7
Accuracy
The computational errors in the array
d should be negligible in most practical situations.
8
Parallelism and Performance
e01bef is not threaded in any implementation.
The time taken by e01bef is approximately proportional to $n$.
The values of the computed interpolant at the points
${\mathbf{px}}\left(\mathit{i}\right)$, for
$\mathit{i}=1,2,\dots ,{\mathbf{m}}$, may be obtained in the real array
pf, of length at least
m, by the call:
Call e01bff(n,x,f,d,m,px,pf,ifail)
where
n,
x and
f are the input arguments to
e01bef and
d is the output argument from
e01bef.
The values of the computed interpolant at the points
${\mathbf{px}}\left(\mathit{i}\right)$, for
$\mathit{i}=1,2,\dots ,{\mathbf{m}}$, together with its first derivatives, may be obtained in the real arrays
pf and
pd, both of length at least
m, by the call:
Call e01bgf(n,x,f,d,m,px,pf,pd,ifail)
where
n,
x,
f and
d are as described above.
The value of the definite integral of the interpolant over the interval
a to
b can be obtained in the real variable
pint by the call:
Call e01bhf(n,x,f,d,a,b,pint,ifail)
where
n,
x,
f and
d are as described above.
10
Example
This example reads in a set of data points, calls
e01bef to compute a piecewise monotonic interpolant,
and then calls
e01bff to evaluate the interpolant at equally spaced points.
10.1
Program Text
Program Text (e01befe.f90)
10.2
Program Data
Program Data (e01befe.d)
10.3
Program Results
Program Results (e01befe.r)