NAG CPP Interface
nagcpp::interp::dim1_spline (e01ba)
1
Purpose
dim1_spline determines a cubic spline interpolant to a given set of data.
2
Specification
#include "e01/nagcpp_e01ba.hpp"
template <typename X, typename Y, typename LAMDA, typename C>
void function dim1_spline(const X &x, const Y &y, LAMDA &&lamda, C &&c, OptionalE01BA opt)
template <typename X, typename Y, typename LAMDA, typename C>
void function dim1_spline(const X &x, const Y &y, LAMDA &&lamda, C &&c)
3
Description
dim1_spline 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
,
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; dim1_spline 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
e02baf (no CPP interface) followed by a call of that function. (See
e02baf (no CPP interface) for further details.)
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:
– double array
Input
-
On entry: must be set to , the th data value of the independent variable , for .
Constraint:
, for .
-
2:
– double array
Input
-
On entry: must be set to , the th data value of the dependent variable , for .
-
3:
– double array
Output
-
On exit: the value of
, the th knot, for .
-
4:
– double array
Output
-
On exit: the coefficient
of the B-spline , for . The remaining elements of the array are not used.
-
5:
– OptionalE01BA
Input/Output
-
Optional parameter container, derived from
Optional.
5.1Additional Quantities
- 1:
- , the number of data points.
- 2:
- The dimension of the arrays lamda and c.
6
Exceptions and Warnings
Errors or warnings detected by the function:
All errors and warnings have an associated numeric error code field,
errorid, stored either as a member of the thrown exception object (see
errorid), or as a member of
opt.
ifail, depending on how errors
and warnings are being handled (see
Error Handling for more details).
- Raises: ErrorException
-
- On entry, and .
Constraint: .
- On entry, .
Constraint: .
- On entry, ,
and .
Constraint: .
- On entry, argument must be a vector of size array.
Supplied argument has dimensions.
- On entry, argument must be a vector of size array.
Supplied argument was a vector of size .
- On entry, argument must be a vector of size array.
The size for the supplied array could not be ascertained.
- On entry, the raw data component of is null.
- On entry, unable to ascertain a value for .
- An unexpected error has been triggered by this routine.
- Your licence key may have expired or may not have been installed correctly.
- Dynamic memory allocation failed.
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
Please see the description for the underlying computational routine in this section of the
FL Interface documentation.
The time taken by dim1_spline 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 calling dim1_spline
the following operations may be carried out on the interpolant .
The value of
at
can be provided in the real variable
s by
calling
dim1_spline_eval.
The values of
and its first three derivatives at
can be provided in the real array
s
of dimension
, by
calling
dim1_spline_deriv.
In the call to
dim1_spline_deriv,
left
must specify whether the left- or right-hand value of the third derivative is required (see
e02bcf (no CPP interface) for details).
The value of the integral of
over the range
to
can be provided in the
real variable
dint
by
calling
dim1_spline_integ.
10
Example
This example sets up data from values of the exponential function in the interval to . dim1_spline is then called to compute a spline interpolant to these data.
The spline is evaluated by
dim1_spline_eval, 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
Example Program