# NAG CL Interfaced01gac (dim1_​data)

Settings help

CL Name Style:

## 1Purpose

d01gac integrates a function which is specified numerically at four or more points, over the whole of its specified range, using third-order finite difference formulae with error estimates, according to a method due to Gill and Miller (1972).

## 2Specification

 #include
 void d01gac (Integer n, const double x[], const double y[], double *ans, double *er, NagError *fail)
The function may be called by the names: d01gac, nag_quad_dim1_data or nag_1d_quad_vals.

## 3Description

d01gac evaluates the definite integral
 $I = ∫ x1 xn y(x) dx ,$
where the function $y$ is specified at the $n$-points ${x}_{1},{x}_{2},\dots ,{x}_{n}$, which should be all distinct, and in either ascending or descending order. The integral between successive points is calculated by a four-point finite difference formula centred on the interval concerned, except in the case of the first and last intervals, where four-point forward and backward difference formulae respectively are employed. If $n$ is less than $4$, the function fails. An approximation to the truncation error is integrated and added to the result. It is also returned separately to give an estimate of the uncertainty in the result. The method is due to Gill and Miller (1972).
Gill P E and Miller G F (1972) An algorithm for the integration of unequally spaced data Comput. J. 15 80–83

## 5Arguments

1: $\mathbf{n}$Integer Input
On entry: $n$, the number of points.
Constraint: ${\mathbf{n}}\ge 4$.
2: $\mathbf{x}\left[{\mathbf{n}}\right]$const double Input
On entry: the values of the independent variable, i.e., the ${x}_{1},{x}_{2},\dots ,{x}_{n}$.
Constraint: either ${\mathbf{x}}\left[0\right]<{\mathbf{x}}\left[1\right]<\cdots <{\mathbf{x}}\left[{\mathbf{n}}-1\right]$ or ${\mathbf{x}}\left[0\right]>{\mathbf{x}}\left[1\right]>\cdots >{\mathbf{x}}\left[{\mathbf{n}}-1\right]$.
3: $\mathbf{y}\left[{\mathbf{n}}\right]$const double Input
On entry: the values of the dependent variable ${y}_{\mathit{i}}$ at the points ${x}_{\mathit{i}}$, for $\mathit{i}=1,2,\dots ,n$.
4: $\mathbf{ans}$double * Output
On exit: the estimated value of the integral.
5: $\mathbf{er}$double * Output
On exit: an estimate of the uncertainty in ans.
6: $\mathbf{fail}$NagError * Input/Output
The NAG error argument (see Section 7 in the Introduction to the NAG Library CL Interface).

## 6Error Indicators and Warnings

NE_ALLOC_FAIL
Dynamic memory allocation failed.
See Section 3.1.2 in the Introduction to the NAG Library CL Interface for further information.
On entry, argument $⟨\mathit{\text{value}}⟩$ had an illegal value.
NE_INT
On entry, ${\mathbf{n}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{n}}\ge 4$.
NE_INTERNAL_ERROR
An internal error has occurred in this function. Check the function call and any array sizes. If the call is correct then please contact NAG for assistance.
See Section 7.5 in the Introduction to the NAG Library CL Interface for further information.
NE_NO_LICENCE
Your licence key may have expired or may not have been installed correctly.
See Section 8 in the Introduction to the NAG Library CL Interface for further information.
NE_NOT_STRICTLY_DECREASING
On entry, ${\mathbf{x}}\left[⟨\mathit{\text{value}}⟩\right]=⟨\mathit{\text{value}}⟩$ and ${\mathbf{x}}\left[⟨\mathit{\text{value}}⟩\right]=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{x}}\left[0\right]>{\mathbf{x}}\left[1\right]>\cdots >{\mathbf{x}}\left[{\mathbf{n}}-1\right]$.
NE_NOT_STRICTLY_INCREASING
On entry, ${\mathbf{x}}\left[⟨\mathit{\text{value}}⟩\right]=⟨\mathit{\text{value}}⟩$ and ${\mathbf{x}}\left[⟨\mathit{\text{value}}⟩\right]=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{x}}\left[0\right]<{\mathbf{x}}\left[1\right]<\cdots <{\mathbf{x}}\left[{\mathbf{n}}-1\right]$.
The sequence x has first two points equal: ${\mathbf{x}}\left[0\right]=⟨\mathit{\text{value}}⟩$ and ${\mathbf{x}}\left[1\right]=⟨\mathit{\text{value}}⟩$.

## 7Accuracy

No accuracy level is specified by you before calling d01gac but on return the absolute value of er is an approximation to, but not necessarily a bound for, $|I-{\mathbf{ans}}|$. If on exit ${\mathbf{fail}}\mathbf{.}\mathbf{code}=$ NE_INT, NE_NOT_STRICTLY_DECREASING, NE_NOT_STRICTLY_INCREASING or NE_QUAD_FIRST_TWO_PTS_EQL, both ans and er are returned as zero.

## 8Parallelism and Performance

d01gac is not threaded in any implementation.

The time taken by d01gac depends on the number of points supplied, $n$.
In their paper, Gill and Miller (1972) do not add the quantity er to ans before return. However, extensive tests have shown that a dramatic reduction in the error often results from such addition. In other cases, it does not make an improvement, but these tend to be cases of low accuracy in which the modified answer is not significantly inferior to the unmodified one. You have the option of recovering the Gill–Miller answer by subtracting er from ans on return from the function.

## 10Example

This example evaluates the integral
 $∫01 4 1+x2 dx = π$
reading in the function values at $21$ unequally spaced points.

### 10.1Program Text

Program Text (d01gace.c)

### 10.2Program Data

Program Data (d01gace.d)

### 10.3Program Results

Program Results (d01gace.r)