NAG FL Interface
e01saf (dim2_scat)
1
Purpose
e01saf generates a twodimensional surface interpolating a set of scattered data points, using the method of Renka and Cline.
2
Specification
Fortran Interface
Integer, Intent (In) 
:: 
m 
Integer, Intent (Inout) 
:: 
ifail 
Integer, Intent (Out) 
:: 
triang(7*m) 
Real (Kind=nag_wp), Intent (In) 
:: 
x(m), y(m), f(m) 
Real (Kind=nag_wp), Intent (Out) 
:: 
grads(2,m) 

C Header Interface
#include <nag.h>
void 
e01saf_ (const Integer *m, const double x[], const double y[], const double f[], Integer triang[], double grads[], Integer *ifail) 

C++ Header Interface
#include <nag.h> extern "C" {
void 
e01saf_ (const Integer &m, const double x[], const double y[], const double f[], Integer triang[], double grads[], Integer &ifail) 
}

The routine may be called by the names e01saf or nagf_interp_dim2_scat.
3
Description
e01saf constructs an interpolating surface $F\left(x,y\right)$
through a set of $m$ scattered data points $\left({x}_{\mathit{r}},{y}_{\mathit{r}},{f}_{\mathit{r}}\right)$, for $\mathit{r}=1,2,\dots ,m$, using a method due to Renka and Cline. In the $\left(x,y\right)$ plane, the data points must be distinct. The constructed surface is continuous and has continuous first derivatives.
The method involves firstly creating a triangulation with all the
$\left(x,y\right)$ data points as nodes, the triangulation being as nearly equiangular as possible (see
Cline and Renka (1984)). Then gradients in the
$x$ and
$y$directions are estimated at node
$\mathit{r}$, for
$\mathit{r}=1,2,\dots ,m$,
as the partial derivatives of a quadratic function of
$x$
and
$y$ which interpolates the data value
${f}_{r}$,
and which fits the data values at nearby nodes (those within a certain distance chosen by the algorithm) in a weighted least squares sense. The weights are chosen such that closer nodes have more influence than more distant nodes on derivative estimates at node
$r$. The computed partial derivatives, with the
${f}_{r}$ values, at the three nodes of each triangle define a piecewise polynomial surface of a certain form which is the interpolant on that triangle. See
Renka and Cline (1984) for more detailed information on the algorithm,
a development of that by
Lawson (1977). The code is derived from
Renka (1984).
The interpolant
$F\left(x,y\right)$ can subsequently be evaluated at any point
$\left(x,y\right)$ inside or outside the domain of the data by a call to
e01sbf.
Points outside the domain are evaluated by extrapolation.
4
References
Cline A K and Renka R L (1984) A storageefficient method for construction of a Thiessen triangulation Rocky Mountain J. Math. 14 119–139
Lawson C L (1977) Software for ${C}^{1}$ surface interpolation Mathematical Software III (ed J R Rice) 161–194 Academic Press
Renka R L (1984) Algorithm 624: triangulation and interpolation of arbitrarily distributed points in the plane ACM Trans. Math. Software 10 440–442
Renka R L and Cline A K (1984) A trianglebased ${C}^{1}$ interpolation method Rocky Mountain J. Math. 14 223–237
5
Arguments

1:
$\mathbf{m}$ – Integer
Input

On entry: $m$, the number of data points.
Constraint:
${\mathbf{m}}\ge 3$.

2:
$\mathbf{x}\left({\mathbf{m}}\right)$ – Real (Kind=nag_wp) array
Input

3:
$\mathbf{y}\left({\mathbf{m}}\right)$ – Real (Kind=nag_wp) array
Input

4:
$\mathbf{f}\left({\mathbf{m}}\right)$ – Real (Kind=nag_wp) array
Input

On entry: the coordinates of the
$\mathit{r}$th data point, for
$\mathit{r}=1,2,\dots ,m$. The data points are accepted in any order, but see
Section 9.
Constraint:
the $\left(x,y\right)$ nodes must not all be collinear, and each node must be unique.

5:
$\mathbf{triang}\left(7\times {\mathbf{m}}\right)$ – Integer array
Output

On exit: a data structure defining the computed triangulation, in a form suitable for passing to
e01sbf.

6:
$\mathbf{grads}\left(2,{\mathbf{m}}\right)$ – Real (Kind=nag_wp) array
Output

On exit: the estimated partial derivatives at the nodes, in a form suitable for passing to
e01sbf. The derivatives at node
$\mathit{r}$ with respect to
$x$ and
$y$ are contained in
${\mathbf{grads}}\left(1,\mathit{r}\right)$ and
${\mathbf{grads}}\left(2,\mathit{r}\right)$ respectively, for
$\mathit{r}=1,2,\dots ,m$.

7:
$\mathbf{ifail}$ – Integer
Input/Output

On entry:
ifail must be set to
$0$,
$1$ or
$1$ to set behaviour on detection of an error; these values have no effect when no error is detected.
A value of $0$ causes the printing of an error message and program execution will be halted; otherwise program execution continues. A value of $1$ means that an error message is printed while a value of $1$ means that it is not.
If halting is not appropriate, the value
$1$ or
$1$ is recommended. If message printing is undesirable, then the value
$1$ is recommended. Otherwise, the value
$0$ is recommended.
When the value $\mathbf{1}$ 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{m}}=\u2329\mathit{\text{value}}\u232a$.
Constraint: ${\mathbf{m}}\ge 3$.
 ${\mathbf{ifail}}=2$

All nodes are collinear. There is no unique solution.
 ${\mathbf{ifail}}=3$

On entry, $\left({\mathbf{x}}\left(\mathit{I}\right),{\mathbf{y}}\left(\mathit{I}\right)\right)=\left({\mathbf{x}}\left(\mathit{J}\right),{\mathbf{y}}\left(\mathit{J}\right)\right)$, for $\mathit{I},\mathit{J}=\u2329\mathit{\text{value}}\u232a\u2329\mathit{\text{value}}\u232a$, ${\mathbf{x}}\left(\mathit{I}\right)$, ${\mathbf{y}}\left(\mathit{I}\right)=\u2329\mathit{\text{value}}\u232a\u2329\mathit{\text{value}}\u232a$.
 ${\mathbf{ifail}}=99$
An unexpected error has been triggered by this routine. Please
contact
NAG.
See
Section 7 in the Introduction to the NAG Library FL Interface for further information.
 ${\mathbf{ifail}}=399$
Your licence key may have expired or may not have been installed correctly.
See
Section 8 in the Introduction to the NAG Library FL Interface for further information.
 ${\mathbf{ifail}}=999$
Dynamic memory allocation failed.
See
Section 9 in the Introduction to the NAG Library FL Interface for further information.
7
Accuracy
On successful exit, the computational errors should be negligible in most situations but you should always check the computed surface for acceptability, by drawing contours for instance. The surface always interpolates the input data exactly.
8
Parallelism and Performance
e01saf is not threaded in any implementation.
The time taken for a call of
e01saf is approximately proportional to the number of data points,
$m$. The routine is more efficient if, before entry, the values in
x,
y and
f are arranged so that the
x array is in ascending order.
10
Example
This example reads in a set of
$30$ data points and calls
e01saf
to construct an interpolating surface. It then calls
e01sbf
to evaluate the interpolant at a sample of points on a rectangular grid.
Note that this example is not typical of a realistic problem: the number of data points would normally be larger, and the interpolant would need to be evaluated on a finer grid to obtain an accurate plot, say.
10.1
Program Text
10.2
Program Data
10.3
Program Results