NAG Library Function Document
nag_1d_spline_interpolant (e01bac)
1
Purpose
nag_1d_spline_interpolant (e01bac) determines a cubic spline interpolant to a given set of data.
2
Specification
#include <nag.h> |
#include <nage01.h> |
void |
nag_1d_spline_interpolant (Integer m,
const double x[],
const double y[],
Nag_Spline *spline,
NagError *fail) |
|
3
Description
nag_1d_spline_interpolant (e01bac) determines a cubic spline
, defined in the range
, which interpolates (passes exactly through) the set of data points
, for
, where
and
. Unlike some other spline interpolation algorithms, derivative end conditions are not imposed. The spline interpolant chosen has
interior knots
, which are set to the values of
respectively. This spline is represented in its B-spline form (see
Cox (1975)):
where
denotes the normalized B-spline of degree 3, defined upon the knots
, and
denotes its coefficient, whose value is to be determined by the function.
The use of B-splines requires eight additional knots , , , , , , and to be specified; the function sets the first four of these to and the last four to .
The algorithm for determining the coefficients is as described in
Cox (1975) except that
factorization is used instead of
decomposition. The implementation of the algorithm involves setting up appropriate information for the related function
nag_1d_spline_fit_knots (e02bac) followed by a call of that function. (For further details of
nag_1d_spline_fit_knots (e02bac), see the function document.)
Values of the spline interpolant, or of its derivatives or definite integral, can subsequently be computed as detailed in
Section 9.
4
References
Cox M G (1975) An algorithm for spline interpolation J. Inst. Math. Appl. 15 95–108
Cox M G (1977) A survey of numerical methods for data and function approximation The State of the Art in Numerical Analysis (ed D A H Jacobs) 627–668 Academic Press
5
Arguments
- 1:
– IntegerInput
-
On entry: , the number of data points.
Constraint:
.
- 2:
– const doubleInput
-
On entry: must be set to , the th data value of the independent variable , for .
Constraint:
, for .
- 3:
– const doubleInput
-
On entry: must be set to , the th data value of the dependent variable , for .
- 4:
– Nag_Spline *
-
Pointer to structure of type Nag_Spline with the following members:
- n – IntegerOutput
-
On exit: the size of the storage internally allocated to . This is set to .
- lamda – double *Output
-
On exit: the pointer to which storage of size is internally allocated. contains the th knot, for .
- c – double *Output
-
On exit: the pointer to which storage of size is internally allocated. contains the coefficient of the B-spline , for .
Note that when the information contained in the pointers
and
is no longer of use, or before a new call to
nag_1d_spline_interpolant (e01bac) with the same
spline, you should free this storage using the NAG macro
NAG_FREE. This storage will not have been allocated if this function returns with
NE_NOERROR.
- 5:
– NagError *Input/Output
-
The NAG error argument (see
Section 3.7 in How to Use the NAG Library and its Documentation).
6
Error Indicators and Warnings
- NE_ALLOC_FAIL
-
Dynamic memory allocation failed.
- NE_INT_ARG_LT
-
On entry, .
Constraint: .
- NE_NOT_STRICTLY_INCREASING
-
The sequence
x is not strictly increasing:
,
.
7
Accuracy
The rounding errors incurred are such that the computed spline is an exact interpolant for a slightly perturbed set of ordinates . The ratio of the root-mean-square value of the to that of the is no greater than a small multiple of the relative machine precision.
8
Parallelism and Performance
nag_1d_spline_interpolant (e01bac) is not threaded in any implementation.
The time taken by nag_1d_spline_interpolant (e01bac) is approximately proportional to .
All the
are used as knot positions except
and
. This choice of knots (see
Cox (1977)) means that
is composed of
cubic arcs as follows. If
, there is just a single arc space spanning the whole interval
to
. If
, the first and last arcs span the intervals
to
and
to
respectively. Additionally if
, the
th arc, for
, spans the interval
to
.
After the call
e01bac(m, x, y, &spline, &fail)
the following operations may be carried out on the interpolant .
The value of
at
can be provided in the variable
sval by calling the function
e02bbc(xval, &sval, &spline, &fail)
The values of
and its first three derivatives at
can be provided in the array
sdif of dimension 4, by the call
e02bcc(derivs, xval, sdif, &spline, &fail)
Here
derivs must specify whether the left- or right-hand value of the third derivative is required (see
nag_1d_spline_deriv (e02bcc) for details). The value of the integral of
over the range
to
can be provided in the variable
sint by
e02bdc(&spline, &sint, &fail)
10
Example
The following example program sets up data from 7 values of the exponential function in the interval 0 to 1. nag_1d_spline_interpolant (e01bac) is then called to compute a spline interpolant to these data.
The spline is evaluated by
nag_1d_spline_evaluate (e02bbc), at the data points and at points halfway between each adjacent pair of data points, and the spline values and the values of
are printed out.
10.1
Program Text
Program Text (e01bace.c)
10.2
Program Data
None.
10.3
Program Results
Program Results (e01bace.r)