NAG Library Routine Document
e01raf
(dim1_ratnl)
1
Purpose
e01raf produces, from a set of function values and corresponding abscissae, the coefficients of an interpolating rational function expressed in continued fraction form.
2
Specification
Fortran Interface
Integer, Intent (In) | :: |
n | Integer, Intent (Inout) | :: |
ifail | Integer, Intent (Out) | :: |
m,
iw(n) | Real (Kind=nag_wp), Intent (In) | :: |
x(n),
f(n) | Real (Kind=nag_wp), Intent (Out) | :: |
a(n),
u(n) |
|
C Header Interface
#include nagmk26.h
void |
e01raf_ (
const Integer *n,
const double x[],
const double f[],
Integer *m,
double a[],
double u[],
Integer iw[],
Integer *ifail) |
|
3
Description
e01raf produces the parameters of a rational function
which assumes prescribed values
at prescribed values
of the independent variable
, for
. More specifically,
e01raf determines the parameters
, for
and
, for
, in the continued fraction
where
and
such that
, for
. The value of
in
(1) is determined by the routine; normally
. The values of
form a reordered subset of the values of
and their ordering is designed to ensure that a representation of the form
(1) is determined whenever one exists.
The subsequent evaluation of
(1) for given values of
can be carried out using
e01rbf.
The computational method employed in
e01raf is the modification of the Thacher–Tukey algorithm described in
Graves–Morris and Hopkins (1981).
4
References
Graves–Morris P R and Hopkins T R (1981) Reliable rational interpolation Numer. Math. 36 111–128
5
Arguments
- 1: – IntegerInput
-
On entry: , the number of data points.
Constraint:
.
- 2: – Real (Kind=nag_wp) arrayInput
-
On entry: must be set to the value of the th data abscissa, , for .
Constraint:
the must be distinct.
- 3: – Real (Kind=nag_wp) arrayInput
-
On entry: must be set to the value of the data ordinate, , corresponding to , for .
- 4: – IntegerOutput
-
On exit: , the number of terms in the continued fraction representation of .
- 5: – Real (Kind=nag_wp) arrayOutput
-
On exit:
contains the value of the parameter
in
, for
. The remaining elements of
a, if any, are set to zero.
- 6: – Real (Kind=nag_wp) arrayOutput
-
On exit:
contains the value of the parameter
in
, for
. The
are a permuted subset of the elements of
x. The remaining
locations contain a permutation of the remaining
, which can be ignored.
- 7: – Integer arrayWorkspace
-
- 8: – IntegerInput/Output
-
On entry:
ifail must be set to
,
. 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
is recommended. If the output of error messages is undesirable, then the value
is recommended. Otherwise, if you are not familiar with this argument, the recommended value is
.
When the value is used it is essential to test the value of ifail on exit.
On exit:
unless the routine detects an error or a warning has been flagged (see
Section 6).
6
Error Indicators and Warnings
If on entry
or
, explanatory error messages are output on the current error message unit (as defined by
x04aaf).
Errors or warnings detected by the routine:
-
-
At least one pair of the values are equal (or so nearly so that a subsequent division will inevitably cause overflow).
-
A continued fraction of the required form does not exist.
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.
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.
Dynamic memory allocation failed.
See
Section 3.7 in How to Use the NAG Library and its Documentation for further information.
7
Accuracy
Usually, it is not the accuracy of the coefficients produced by this routine which is of prime interest, but rather the accuracy of the value of
that is produced by the associated routine
e01rbf when subsequently it evaluates the continued fraction
(1) for a given value of
. This final accuracy will depend mainly on the nature of the interpolation being performed. If interpolation of a ‘well-behaved smooth’ function is attempted (and provided the data adequately represents the function), high accuracy will normally ensue, but, if the function is not so ‘smooth’ or extrapolation is being attempted, high accuracy is much less likely. Indeed, in extreme cases, results can be highly inaccurate.
There is no built-in test of accuracy but several courses are open to you to prevent the production or the acceptance of inaccurate results.
1. |
If the origin of a variable is well outside the range of its data values, the origin should be shifted to correct this; and, if the new data values are still excessively large or small, scaling to make the largest value of the order of unity is recommended. Thus, normalization to the range to is ideal. This applies particularly to the independent variable; for the dependent variable, the removal of leading figures which are common to all the data values will usually suffice. |
2. |
To check the effect of rounding errors engendered in the routines themselves, e01raf should be re-entered with interchanged with and with , . This will produce a completely different vector and a reordered vector , but any change in the value of subsequently produced by e01rbf will be due solely to rounding error. |
3. |
Even if the data consist of calculated values of a formal mathematical function, it is only in exceptional circumstances that bounds for the interpolation error (the difference between the true value of the function underlying the data and the value which would be produced by the two routines if exact arithmetic were used) can be derived that are sufficiently precise to be of practical use. Consequently, you are recommended to rely on comparison checks: if extra data points are available, the calculation may be repeated with one or more data pairs added or exchanged, or alternatively, one of the original data pairs may be omitted. If the algorithms are being used for extrapolation, the calculations should be performed repeatedly with the nearest points until, hopefully, successive values of for the given agree to the required accuracy. |
8
Parallelism and Performance
e01raf is not threaded in any implementation.
The time taken by e01raf is approximately proportional to .
The continued fraction
(1) when expanded produces a rational function in
, the degree of whose numerator is either equal to or exceeds by unity that of the denominator. Only if this rather special form of interpolatory rational function is needed explicitly, would this routine be used without subsequent entry (or entries) to
e01rbf.
10
Example
This example reads in the abscissae and ordinates of data points and prints the arguments and of a rational function which interpolates them.
10.1
Program Text
Program Text (e01rafe.f90)
10.2
Program Data
Program Data (e01rafe.d)
10.3
Program Results
Program Results (e01rafe.r)