e02 Chapter Contents
e02 Chapter Introduction
NAG Library Manual

# NAG Library Function Documentnag_2d_spline_deriv_rect (e02dhc)

## 1  Purpose

nag_2d_spline_deriv_rect (e02dhc) computes the partial derivative (of order ${\nu }_{x}$, ${\nu }_{y}$), of a bicubic spline approximation to a set of data values, from its B-spline representation, at points on a rectangular grid in the $x$-$y$ plane. This function may be used to calculate derivatives of a bicubic spline given in the form produced by nag_2d_spline_interpolant (e01dac)nag_2d_spline_fit_panel (e02dac)nag_2d_spline_fit_grid (e02dcc) and nag_2d_spline_fit_scat (e02ddc).

## 2  Specification

 #include #include
 void nag_2d_spline_deriv_rect (Integer mx, Integer my, const double x[], const double y[], Integer nux, Integer nuy, double z[], Nag_2dSpline *spline, NagError *fail)

## 3  Description

nag_2d_spline_deriv_rect (e02dhc) determines the partial derivative $\frac{{\partial }^{{\nu }_{x}+{\nu }_{y}}}{\partial {x}^{{\nu }_{x}}\partial {y}^{{\nu }_{y}}}$ of a smooth bicubic spline approximation $s\left(x,y\right)$ at the set of data points $\left({x}_{q},{y}_{r}\right)$.
The spline is given in the B-spline representation
 $sx,y = ∑ i=1 nx-4 ∑ j=1 ny-4 cij Mix Njy ,$ (1)
where ${M}_{i}\left(x\right)$ and ${N}_{j}\left(y\right)$ denote normalized cubic B-splines, the former defined on the knots ${\lambda }_{i}$ to ${\lambda }_{i+4}$ and the latter on the knots ${\mu }_{j}$ to ${\mu }_{j+4}$, with ${n}_{x}$ and ${n}_{y}$ the total numbers of knots of the computed spline with respect to the $x$ and $y$ variables respectively. For further details, see Hayes and Halliday (1974) for bicubic splines and de Boor (1972) for normalized B-splines. This function is suitable for B-spline representations returned by nag_2d_spline_interpolant (e01dac)nag_2d_spline_fit_panel (e02dac)nag_2d_spline_fit_grid (e02dcc) and nag_2d_spline_fit_scat (e02ddc).
The partial derivatives can be up to order $2$ in each direction; thus the highest mixed derivative available is $\frac{{\partial }^{4}}{\partial {x}^{2}\partial {y}^{2}}$.
The points in the grid are defined by coordinates ${x}_{\mathit{q}}$, for $\mathit{q}=1,2,\dots ,{m}_{x}$, along the $x$ axis, and coordinates ${y}_{\mathit{r}}$, for $\mathit{r}=1,2,\dots ,{m}_{y}$, along the $y$ axis.

## 4  References

de Boor C (1972) On calculating with B-splines J. Approx. Theory 6 50–62
Dierckx P (1981) An improved algorithm for curve fitting with spline functions Report TW54 Department of Computer Science, Katholieke Univerciteit Leuven
Dierckx P (1982) A fast algorithm for smoothing data on a rectangular grid while using spline functions SIAM J. Numer. Anal. 19 1286–1304
Hayes J G and Halliday J (1974) The least squares fitting of cubic spline surfaces to general data sets J. Inst. Math. Appl. 14 89–103
Reinsch C H (1967) Smoothing by spline functions Numer. Math. 10 177–183

## 5  Arguments

1:     mxIntegerInput
On entry: ${m}_{x}$, the number of grid points along the $x$ axis.
Constraint: ${\mathbf{mx}}\ge 1$.
2:     myIntegerInput
On entry: ${m}_{y}$, the number of grid points along the $y$ axis.
Constraint: ${\mathbf{my}}\ge 1$.
3:     x[mx]const doubleInput
On entry: ${\mathbf{x}}\left[q-1\right]$ must be set to ${x}_{\mathit{q}}$, the $x$ coordinate of the $\mathit{q}$th grid point along the $x$ axis, for $\mathit{q}=1,2,\dots ,{m}_{x}$, on which values of the partial derivative are sought.
Constraint: ${x}_{1}<{x}_{2}<\cdots <{x}_{{m}_{x}}$.
4:     y[my]const doubleInput
On entry: ${\mathbf{y}}\left[\mathit{r}-1\right]$ must be set to ${y}_{\mathit{r}}$, the $y$ coordinate of the $\mathit{r}$th grid point along the $y$ axis, for $\mathit{r}=1,2,\dots ,{m}_{y}$ on which values of the partial derivative are sought.
Constraint: ${y}_{1}<{y}_{2}<\cdots <{y}_{{m}_{y}}$.
5:     nuxIntegerInput
On entry: specifies the order, ${\nu }_{x}$ of the partial derivative in the $x$-direction.
Constraint: $0\le {\mathbf{nux}}\le 2$.
6:     nuyIntegerInput
On entry: specifies the order, ${\nu }_{y}$ of the partial derivative in the $y$-direction.
Constraint: $0\le {\mathbf{nuy}}\le 2$.
7:     z[${\mathbf{mx}}×{\mathbf{my}}$]doubleOutput
On exit: ${\mathbf{z}}\left[{m}_{y}×\left(\mathit{q}-1\right)+\mathit{r}-1\right]$ contains the derivative $\frac{{\partial }^{{\nu }_{x}+{\nu }_{y}}}{{\partial x}^{{\nu }_{x}}{\partial y}^{{\nu }_{y}}}s\left({x}_{q},{y}_{r}\right)$, for $\mathit{q}=1,2,\dots ,{m}_{x}$ and $\mathit{r}=1,2,\dots ,{m}_{y}$.
8:     splineNag_2dSpline *Input
Pointer to structure of type Nag_2dSpline describing the bicubic spline approximation to be differentiated.
In normal usage, the call to nag_2d_spline_deriv_rect (e02dhc) follows a call to nag_2d_spline_interpolant (e01dac), nag_2d_spline_fit_panel (e02dac), nag_2d_spline_fit_grid (e02dcc) or nag_2d_spline_fit_scat (e02ddc), in which case, members of the structure spline will have been set up correctly for input to nag_2d_spline_deriv_rect (e02dhc).
9:     failNagError *Input/Output
The NAG error argument (see Section 3.6 in the Essential Introduction).

## 6  Error Indicators and Warnings

NE_ALLOC_FAIL
Dynamic memory allocation failed.
On entry, argument $⟨\mathit{\text{value}}⟩$ had an illegal value.
NE_INT
On entry, ${\mathbf{mx}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{mx}}\ge 1$.
On entry, ${\mathbf{my}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{my}}\ge 1$.
On entry, ${\mathbf{nux}}=⟨\mathit{\text{value}}⟩$.
Constraint: $0\le {\mathbf{nux}}\le 2$.
On entry, ${\mathbf{nuy}}=⟨\mathit{\text{value}}⟩$.
Constraint: $0\le {\mathbf{nuy}}\le 2$.
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.
NE_NOT_STRICTLY_INCREASING
On entry, for $i=⟨\mathit{\text{value}}⟩$, ${\mathbf{x}}\left[i-2\right]=⟨\mathit{\text{value}}⟩$ and ${\mathbf{x}}\left[i-1\right]=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{x}}\left[\mathit{i}-2\right]\le {\mathbf{x}}\left[\mathit{i}-1\right]$, for $\mathit{i}=2,3,\dots ,{\mathbf{mx}}$.
On entry, for $i=⟨\mathit{\text{value}}⟩$, ${\mathbf{y}}\left[i-2\right]=⟨\mathit{\text{value}}⟩$ and ${\mathbf{y}}\left[i-1\right]=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{y}}\left[\mathit{i}-2\right]\le {\mathbf{y}}\left[\mathit{i}-1\right]$, for $\mathit{i}=2,3,\dots ,{\mathbf{my}}$.

## 7  Accuracy

On successful exit, the partial derivatives on the given mesh are accurate to machine precision with respect to the supplied bicubic spline. Please refer to Section 7 in nag_2d_spline_interpolant (e01dac)nag_2d_spline_fit_panel (e02dac)nag_2d_spline_fit_grid (e02dcc) and nag_2d_spline_fit_scat (e02ddc) of the function document for the respective function which calculated the spline approximant for details on the accuracy of that approximation.

Not applicable.

None.

## 10  Example

This example reads in values of ${m}_{x}$, ${m}_{y}$, ${x}_{\mathit{q}}$, for $\mathit{q}=1,2,\dots ,{m}_{x}$, and ${y}_{\mathit{r}}$, for $\mathit{r}=1,2,\dots ,{m}_{y}$, followed by values of the ordinates ${f}_{q,r}$ defined at the grid points $\left({x}_{q},{y}_{r}\right)$. It then calls nag_2d_spline_fit_grid (e02dcc) to compute a bicubic spline approximation for one specified value of $S$. Finally it evaluates the spline and its first $x$ derivative at a small sample of points on a rectangular grid by calling nag_2d_spline_deriv_rect (e02dhc).

### 10.1  Program Text

Program Text (e02dhce.c)

### 10.2  Program Data

Program Data (e02dhce.d)

### 10.3  Program Results

Program Results (e02dhce.r)