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_interp_1d_monotonic_intg (e01bh)

## Purpose

nag_interp_1d_monotonic_intg (e01bh) evaluates the definite integral of a piecewise cubic Hermite interpolant over the interval $\left[a,b\right]$.

## Syntax

[pint, ifail] = e01bh(x, f, d, a, b, 'n', n)
[pint, ifail] = nag_interp_1d_monotonic_intg(x, f, d, a, b, 'n', n)

## Description

nag_interp_1d_monotonic_intg (e01bh) evaluates the definite integral of a piecewise cubic Hermite interpolant, as computed by nag_interp_1d_monotonic (e01be), over the interval $\left[a,b\right]$.
If either $a$ or $b$ lies outside the interval from ${\mathbf{x}}\left(1\right)$ to ${\mathbf{x}}\left({\mathbf{n}}\right)$ computation of the integral involves extrapolation and a warning is returned.
The function is derived from function PCHIA in Fritsch (1982).

## References

Fritsch F N (1982) PCHIP final specifications Report UCID-30194 Lawrence Livermore National Laboratory

## Parameters

### Compulsory Input Parameters

1:     $\mathrm{x}\left({\mathbf{n}}\right)$ – double array
2:     $\mathrm{f}\left({\mathbf{n}}\right)$ – double array
3:     $\mathrm{d}\left({\mathbf{n}}\right)$ – double array
n, x, f and d must be unchanged from the previous call of nag_interp_1d_monotonic (e01be).
4:     $\mathrm{a}$ – double scalar
5:     $\mathrm{b}$ – double scalar
The interval $\left[a,b\right]$ over which integration is to be performed.

### Optional Input Parameters

1:     $\mathrm{n}$int64int32nag_int scalar
Default: the dimension of the arrays x, f, d. (An error is raised if these dimensions are not equal.)
n, x, f and d must be unchanged from the previous call of nag_interp_1d_monotonic (e01be).

### Output Parameters

1:     $\mathrm{pint}$ – double scalar
The value of the definite integral of the interpolant over the interval $\left[a,b\right]$.
2:     $\mathrm{ifail}$int64int32nag_int scalar
${\mathbf{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:

Cases prefixed with W are classified as warnings and do not generate an error of type NAG:error_n. See nag_issue_warnings.

${\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.
W  ${\mathbf{ifail}}=3$
On entry, at least one of a or b lies outside the interval [${\mathbf{x}}\left(1\right),{\mathbf{x}}\left({\mathbf{n}}\right)$], and extrapolation was performed to compute the integral. The value returned is therefore unreliable.
${\mathbf{ifail}}=-99$
${\mathbf{ifail}}=-399$
Your licence key may have expired or may not have been installed correctly.
${\mathbf{ifail}}=-999$
Dynamic memory allocation failed.

## Accuracy

The computational error in the value returned for pint should be negligible in most practical situations.

The time taken by nag_interp_1d_monotonic_intg (e01bh) is approximately proportional to the number of data points included within the interval $\left[a,b\right]$.

## Example

This example reads in values of n, x, f and d. It then reads in pairs of values for a and b, and evaluates the definite integral of the interpolant over the interval $\left[{\mathbf{a}},{\mathbf{b}}\right]$ until end-of-file is reached.
```function e01bh_example

fprintf('e01bh example results\n\n');

x = [7.99 8.09    8.19    8.7     9.2     10      12      15      20];
f = [0 2.7643e-05 0.04375 0.16918 0.46943 0.94374 0.99864 0.99992 0.99999];

% Theses are as returned by e01be(x,f)
d = [0;
0.00055251;
0.33587;
0.34944;
0.59696;
0.060326;
0.000898335;
2.93954e-05;
0];

m = 11;
dx = (x(end)-x(1))/(m-1);
px = [x(1):dx:x(end)];

ia = [1 6 7 8];
ib = [9 7 6 8];
fprintf('                               Integral\n');
fprintf('          a            b     over (a,b)\n');

for i = 1:4
a = x(ia(i));
b = x(ib(i));
[pint, ifail] = e01bh( ...
x, f, d, a, b);
fprintf('%13.4f%13.4f%13.4f\n', a, b, pint);
end

```
```e01bh example results

Integral
a            b     over (a,b)
7.9900      20.0000      10.7648
10.0000      12.0000       1.9622
12.0000      10.0000      -1.9622
15.0000      15.0000       0.0000
```