NAG Library Routine Document
e02agf
(dim1_cheb_con)
1
Purpose
e02agf computes constrained weighted least squares polynomial approximations in Chebyshev series form to an arbitrary set of data points. The values of the approximations and any number of their derivatives can be specified at selected points.
2
Specification
Fortran Interface
Subroutine e02agf ( 
m,
kplus1,
lda,
xmin,
xmax,
x,
y,
w,
mf,
xf,
yf,
lyf,
ip,
a,
s,
np1,
wrk,
lwrk,
iwrk,
liwrk,
ifail) 
Integer, Intent (In)  :: 
m,
kplus1,
lda,
mf,
lyf,
ip(mf),
lwrk,
liwrk  Integer, Intent (Inout)  :: 
ifail  Integer, Intent (Out)  :: 
np1,
iwrk(liwrk)  Real (Kind=nag_wp), Intent (In)  :: 
xmin,
xmax,
x(m),
y(m),
w(m),
xf(mf),
yf(lyf)  Real (Kind=nag_wp), Intent (Inout)  :: 
a(lda,kplus1)  Real (Kind=nag_wp), Intent (Out)  :: 
s(kplus1),
wrk(lwrk) 

C Header Interface
#include nagmk26.h
void 
e02agf_ (
const Integer *m,
const Integer *kplus1,
const Integer *lda,
const double *xmin,
const double *xmax,
const double x[],
const double y[],
const double w[],
const Integer *mf,
const double xf[],
const double yf[],
const Integer *lyf,
const Integer ip[],
double a[],
double s[],
Integer *np1,
double wrk[],
const Integer *lwrk,
Integer iwrk[],
const Integer *liwrk,
Integer *ifail) 

3
Description
e02agf determines least squares polynomial approximations of degrees up to $k$ to the set of data points $\left({x}_{\mathit{r}},{y}_{\mathit{r}}\right)$ with weights ${w}_{\mathit{r}}$, for $\mathit{r}=1,2,\dots ,m$. The value of $k$, the maximum degree required, is to be prescribed by you. At each of the values ${xf}_{\mathit{r}}$, for $\mathit{r}=1,2,\dots ,mf$, of the independent variable $x$, the approximations and their derivatives up to order ${p}_{\mathit{r}}$ are constrained to have one of the values ${yf}_{\mathit{s}}$, for $\mathit{s}=1,2,\dots ,\mathit{n}$, specified by you, where $\mathit{n}=mf+{\displaystyle \sum _{r=0}^{mf}}{p}_{r}$.
The approximation of degree
$i$ has the property that, subject to the imposed constraints, it minimizes
${\sigma}_{i}$, the sum of the squares of the weighted residuals
${\epsilon}_{\mathit{r}}$, for
$\mathit{r}=1,2,\dots ,m$, where
and
${f}_{i}\left({x}_{r}\right)$ is the value of the polynomial approximation of degree
$i$ at the
$r$th data point.
Each polynomial is represented in Chebyshev series form with normalized argument
$\stackrel{}{x}$. This argument lies in the range
$1$ to
$+1$ and is related to the original variable
$x$ by the linear transformation
where
${x}_{\mathrm{min}}$ and
${x}_{\mathrm{max}}$, specified by you, are respectively the lower and upper end points of the interval of
$x$ over which the polynomials are to be defined.
The polynomial approximation of degree
$i$ can be written as
where
${T}_{j}\left(\stackrel{}{x}\right)$ is the Chebyshev polynomial of the first kind of degree
$j$ with argument
$\stackrel{}{x}$. For
$i=\mathit{n},\mathit{n}+1,\dots ,k$, the routine produces the values of the coefficients
${a}_{i\mathit{j}}$, for
$\mathit{j}=0,1,\dots ,i$, together with the value of the root mean square residual,
where
${m}^{\prime}$ is the number of data points with nonzero weight.
Values of the approximations may subsequently be computed using
e02aef or
e02akf.
First
e02agf determines a polynomial
$\mu \left(\stackrel{}{x}\right)$, of degree
$\mathit{n}1$, which satisfies the given constraints, and a polynomial
$\nu \left(\stackrel{}{x}\right)$, of degree
$\mathit{n}$, which has value (or derivative) zero wherever a constrained value (or derivative) is specified. It then fits
${y}_{\mathit{r}}\mu \left({x}_{\mathit{r}}\right)$, for
$\mathit{r}=1,2,\dots ,m$, with polynomials of the required degree in
$\stackrel{}{x}$ each with factor
$\nu \left(\stackrel{}{x}\right)$. Finally the coefficients of
$\mu \left(\stackrel{}{x}\right)$ are added to the coefficients of these fits to give the coefficients of the constrained polynomial approximations to the data points
$\left({x}_{\mathit{r}},{y}_{\mathit{r}}\right)$, for
$\mathit{r}=1,2,\dots ,m$. The method employed is given in
Hayes (1970): it is an extension of Forsythe's orthogonal polynomials method (see
Forsythe (1957)) as modified by Clenshaw (see
Clenshaw (1960)).
4
References
Clenshaw C W (1960) Curve fitting with a digital computer Comput. J. 2 170–173
Forsythe G E (1957) Generation and use of orthogonal polynomials for data fitting with a digital computer J. Soc. Indust. Appl. Math. 5 74–88
Hayes J G (ed.) (1970) Numerical Approximation to Functions and Data Athlone Press, London
5
Arguments
 1: $\mathbf{m}$ – IntegerInput

On entry: $m$, the number of data points to be fitted.
Constraint:
${\mathbf{m}}\ge 1$.
 2: $\mathbf{kplus1}$ – IntegerInput

On entry: $k+1$, where $k$ is the maximum degree required.
Constraint:
$\mathit{n}+1\le {\mathbf{kplus1}}\le {m}^{\prime \prime}+\mathit{n}$ is the total number of constraints and ${m}^{\prime \prime}$ is the number of data points with nonzero weights and distinct abscissae which do not coincide with any of the ${\mathbf{xf}}\left(r\right)$.
 3: $\mathbf{lda}$ – IntegerInput

On entry: the first dimension of the array
a as declared in the (sub)program from which
e02agf is called.
Constraint:
${\mathbf{lda}}\ge {\mathbf{kplus1}}$.
 4: $\mathbf{xmin}$ – Real (Kind=nag_wp)Input
 5: $\mathbf{xmax}$ – Real (Kind=nag_wp)Input

On entry: the lower and upper end points, respectively, of the interval
$\left[{x}_{\mathrm{min}},{x}_{\mathrm{max}}\right]$. Unless there are specific reasons to the contrary, it is recommended that
xmin and
xmax be set respectively to the lowest and highest value among the
${x}_{r}$ and
${xf}_{r}$. This avoids the danger of extrapolation provided there is a constraint point or data point with nonzero weight at each end point.
Constraint:
${\mathbf{xmax}}>{\mathbf{xmin}}$.
 6: $\mathbf{x}\left({\mathbf{m}}\right)$ – Real (Kind=nag_wp) arrayInput

On entry: ${\mathbf{x}}\left(\mathit{r}\right)$ must contain the value ${x}_{\mathit{r}}$ of the independent variable at the $\mathit{r}$th data point, for $\mathit{r}=1,2,\dots ,m$.
Constraint:
the ${\mathbf{x}}\left(r\right)$ must be in nondecreasing order and satisfy ${\mathbf{xmin}}\le {\mathbf{x}}\left(r\right)\le {\mathbf{xmax}}$.
 7: $\mathbf{y}\left({\mathbf{m}}\right)$ – Real (Kind=nag_wp) arrayInput

On entry: ${\mathbf{y}}\left(\mathit{r}\right)$ must contain ${y}_{\mathit{r}}$, the value of the dependent variable at the $\mathit{r}$th data point, for $\mathit{r}=1,2,\dots ,m$.
 8: $\mathbf{w}\left({\mathbf{m}}\right)$ – Real (Kind=nag_wp) arrayInput

On entry:
${\mathbf{w}}\left(\mathit{r}\right)$ must contain the weight
${w}_{\mathit{r}}$ to be applied to the data point
${x}_{\mathit{r}}$, for
$\mathit{r}=1,2,\dots ,m$. For advice on the choice of weights see the
E02 Chapter Introduction. Negative weights are treated as positive. A zero weight causes the corresponding data point to be ignored. Zero weight should be given to any data point whose
$x$ and
$y$ values both coincide with those of a constraint (otherwise the denominators involved in the root mean square residuals
${S}_{i}$ will be slightly in error).
 9: $\mathbf{mf}$ – IntegerInput

On entry: $mf$, the number of values of the independent variable at which a constraint is specified.
Constraint:
${\mathbf{mf}}\ge 1$.
 10: $\mathbf{xf}\left({\mathbf{mf}}\right)$ – Real (Kind=nag_wp) arrayInput

On entry: ${\mathbf{xf}}\left(\mathit{r}\right)$ must contain ${xf}_{\mathit{r}}$, the value of the independent variable at which a constraint is specified, for $\mathit{r}=1,2,\dots ,{\mathbf{mf}}$.
Constraint:
these values need not be ordered but must be distinct and satisfy ${\mathbf{xmin}}\le {\mathbf{xf}}\left(r\right)\le {\mathbf{xmax}}$.
 11: $\mathbf{yf}\left({\mathbf{lyf}}\right)$ – Real (Kind=nag_wp) arrayInput

On entry: the values which the approximating polynomials and their derivatives are required to take at the points specified in
xf. For each value of
${\mathbf{xf}}\left(\mathit{r}\right)$,
yf contains in successive elements the required value of the approximation, its first derivative, second derivative,
$\dots ,{p}_{\mathit{r}}$th derivative, for
$\mathit{r}=1,2,\dots ,mf$. Thus the value,
${yf}_{s}$, which the
$k$th derivative of each approximation (
$k=0$ referring to the approximation itself) is required to take at the point
${\mathbf{xf}}\left(r\right)$ must be contained in
${\mathbf{yf}}\left(s\right)$, where
where
$k=0,1,\dots ,{p}_{r}$ and
$r=1,2,\dots ,mf$. The derivatives are with respect to the independent variable
$x$.
 12: $\mathbf{lyf}$ – IntegerInput

On entry: the dimension of the array
yf as declared in the (sub)program from which
e02agf is called.
Constraint:
${\mathbf{lyf}}\ge {\mathbf{mf}}+{\displaystyle \sum _{\mathit{i}=1}^{{\mathbf{mf}}}}{\mathbf{ip}}\left(\mathit{i}\right)$.
 13: $\mathbf{ip}\left({\mathbf{mf}}\right)$ – Integer arrayInput

On entry: ${\mathbf{ip}}\left(\mathit{r}\right)$ must contain ${p}_{\mathit{r}}$, the order of the highestorder derivative specified at ${\mathbf{xf}}\left(\mathit{r}\right)$, for $\mathit{r}=1,2,\dots ,mf$. ${p}_{r}=0$ implies that the value of the approximation at ${\mathbf{xf}}\left(r\right)$ is specified, but not that of any derivative.
Constraint:
${\mathbf{ip}}\left(\mathit{r}\right)\ge 0$, for $\mathit{r}=1,2,\dots ,{\mathbf{mf}}$.
 14: $\mathbf{a}\left({\mathbf{lda}},{\mathbf{kplus1}}\right)$ – Real (Kind=nag_wp) arrayOutput

On exit: ${\mathbf{a}}\left(\mathit{i}+1,\mathit{j}+1\right)$ contains the coefficient ${a}_{\mathit{i}\mathit{j}}$ in the approximating polynomial of degree $\mathit{i}$, for $\mathit{i}=\mathit{n},\dots ,k$ and $\mathit{j}=0,1,\dots ,\mathit{i}$.
 15: $\mathbf{s}\left({\mathbf{kplus1}}\right)$ – Real (Kind=nag_wp) arrayOutput

On exit:
${\mathbf{s}}\left(\mathit{i}+1\right)$ contains
${S}_{\mathit{i}}$, for
$\mathit{i}=\mathit{n},\dots ,k$, the root mean square residual corresponding to the approximating polynomial of degree
$i$. In the case where the number of data points with nonzero weight is equal to
$k+1\mathit{n}$,
${S}_{i}$ is indeterminate: the routine sets it to zero. For the interpretation of the values of
${S}_{i}$ and their use in selecting an appropriate degree, see
Section 3.1 in the E02 Chapter Introduction.
 16: $\mathbf{np1}$ – IntegerOutput

On exit: $\mathit{n}+1$, where $\mathit{n}$ is the total number of constraint conditions imposed: $\mathit{n}=mf+{p}_{1}+{p}_{2}+\cdots +{p}_{mf}$.
 17: $\mathbf{wrk}\left({\mathbf{lwrk}}\right)$ – Real (Kind=nag_wp) arrayOutput

On exit: contains weighted residuals of the highest degree of fit determined $\left(k\right)$. The residual at
${x}_{\mathit{r}}$ is in element $2\left(\mathit{n}+1\right)+3\left(m+\mathit{k}+1\right)+\mathit{r}$, for $\mathit{r}=1,2,\dots ,m$. The rest of the array is used as workspace.
 18: $\mathbf{lwrk}$ – IntegerInput

On entry: the dimension of the array
wrk as declared in the (sub)program from which
e02agf is called.
Constraint:
${\mathbf{lwrk}}\ge \mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(4\times {\mathbf{m}}+3\times {\mathbf{kplus1}},8\times \mathit{n}+5\times \mathit{ipmax}+{\mathbf{mf}}+10\right)+2\times \mathit{n}+2$, where $\mathit{ipmax}=\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left({\mathbf{ip}}\left(\mathit{r}\right)\right)$, for $\mathit{r}=1,2,\dots ,mf$.
 19: $\mathbf{iwrk}\left({\mathbf{liwrk}}\right)$ – Integer arrayWorkspace
 20: $\mathbf{liwrk}$ – IntegerInput

On entry: the dimension of the array
iwrk as declared in the (sub)program from which
e02agf is called.
Constraint:
${\mathbf{liwrk}}\ge 2\times {\mathbf{mf}}+2$.
 21: $\mathbf{ifail}$ – IntegerInput/Output

On entry:
ifail must be set to
$0$,
$1\text{ or}1$. If you are unfamiliar with this argument you should refer to
Section 3.4 in How to Use the NAG Library and its Documentation for details.
For environments where it might be inappropriate to halt program execution when an error is detected, the value
$1\text{ or}1$ is recommended. If the output of error messages is undesirable, then the value
$1$ is recommended. Otherwise, if you are not familiar with this argument, the recommended value is
$0$.
When the value $\mathbf{1}\text{ 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}}<1$, 
or  ${\mathbf{kplus1}}<\mathit{n}+1$, 
or  ${\mathbf{lda}}<{\mathbf{kplus1}}$, 
or  ${\mathbf{mf}}<1$, 
or  ${\mathbf{lyf}}<\mathit{n}$, 
or  lwrk is too small (see Section 5), 
or  ${\mathbf{liwrk}}<2\times {\mathbf{mf}}+2$. 
(Here $\mathit{n}$ is the total number of constraint conditions.)
 ${\mathbf{ifail}}=2$

${\mathbf{ip}}\left(r\right)<0$ for some $r=1,2,\dots ,{\mathbf{mf}}$.
 ${\mathbf{ifail}}=3$

${\mathbf{xmin}}\ge {\mathbf{xmax}}$, or
${\mathbf{xf}}\left(r\right)$ is not in the interval
xmin to
xmax for some
$r=1,2,\dots ,{\mathbf{mf}}$, or the
${\mathbf{xf}}\left(r\right)$ are not distinct.
 ${\mathbf{ifail}}=4$

${\mathbf{x}}\left(r\right)$ is not in the interval
xmin to
xmax for some
$r=1,2,\dots ,{\mathbf{m}}$.
 ${\mathbf{ifail}}=5$

${\mathbf{x}}\left(r\right)<{\mathbf{x}}\left(r1\right)$ for some $r=2,3,\dots ,{\mathbf{m}}$.
 ${\mathbf{ifail}}=6$

${\mathbf{kplus1}}>{m}^{\prime \prime}+\mathit{n}$, where ${m}^{\prime \prime}$ is the number of data points with nonzero weight and distinct abscissae which do not coincide with any ${\mathbf{xf}}\left(r\right)$. Thus there is no unique solution.
 ${\mathbf{ifail}}=7$

The polynomials $\mu \left(x\right)$ and/or $\nu \left(x\right)$ cannot be determined. The problem supplied is too illconditioned. This may occur when the constraint points are very close together, or large in number, or when an attempt is made to constrain highorder derivatives.
 ${\mathbf{ifail}}=99$
An unexpected error has been triggered by this routine. Please
contact
NAG.
See
Section 3.9 in How to Use the NAG Library and its Documentation for further information.
 ${\mathbf{ifail}}=399$
Your licence key may have expired or may not have been installed correctly.
See
Section 3.8 in How to Use the NAG Library and its Documentation for further information.
 ${\mathbf{ifail}}=999$
Dynamic memory allocation failed.
See
Section 3.7 in How to Use the NAG Library and its Documentation for further information.
7
Accuracy
No complete error analysis exists for either the interpolating algorithm or the approximating algorithm. However, considerable experience with the approximating algorithm shows that it is generally extremely satisfactory. Also the moderate number of constraints, of loworder, which are typical of data fitting applications, are unlikely to cause difficulty with the interpolating routine.
8
Parallelism and Performance
e02agf is not threaded in any implementation.
The time taken to form the interpolating polynomial is approximately proportional to ${\mathit{n}}^{3}$, and that to form the approximating polynomials is very approximately proportional to $m\left(k+1\right)\left(k+1\mathit{n}\right)$.
To carry out a least squares polynomial fit without constraints, use
e02adf. To carry out polynomial interpolation only, use
e01aef.
10
Example
This example reads data in the following order, using the notation of the argument list above:
 mf
 ${\mathbf{ip}}\left(\mathit{i}\right)$,
${\mathbf{xf}}\left(\mathit{i}\right)$,
Yvalue and derivative values (if any) at ${\mathbf{xf}}\left(\mathit{i}\right)$, for $\mathit{i}=1,2,\dots ,{\mathbf{mf}}$
 m
 ${\mathbf{x}}\left(\mathit{i}\right)$,
${\mathbf{y}}\left(\mathit{i}\right)$,
${\mathbf{w}}\left(\mathit{i}\right)$, for $\mathit{i}=1,2,\dots ,{\mathbf{m}}$
 $k$, xmin, xmax
The output is:
 the root mean square residual for each degree from $\mathit{n}$ to $k$;
 the Chebyshev coefficients for the fit of degree $k$;
 the data points, and the fitted values and residuals for the fit of degree $k$.
The program is written in a generalized form which will read any number of datasets.
The dataset supplied specifies
$5$ data points in the interval
$\left[0.0,4.0\right]$ with unit weights, to which are to be fitted polynomials,
$p$, of degrees up to
$4$, subject to the
$3$ constraints:
 $p\left(0.0\right)=1.0\text{, \hspace{1em}}{p}^{\prime}\left(0.0\right)=2.0\text{, \hspace{1em}}p\left(4.0\right)=9.0\text{.}$
10.1
Program Text
Program Text (e02agfe.f90)
10.2
Program Data
Program Data (e02agfe.d)
10.3
Program Results
Program Results (e02agfe.r)