The routine and its subsidiaries will now return an error status as supplied by
PDA_XERMSG.
SUBROUTINE PDA_DPOLFT (N, X, Y, W, MAXDEG, NDEG, EPS, R, IERR, A,
+ STATUS)
***BEGIN PROLOGUE PDA_DPOLFT
***PURPOSE Fit discrete data in a least squares sense by polynomials
in one variable.
***LIBRARY SLATEC
***CATEGORY K1A1A2
***TYPE DOUBLE PRECISION (POLFIT-S, PDA_DPOLFT-D)
***KEYWORDS CURVE FITTING, DATA FITTING, LEAST SQUARES, POLYNOMIAL FIT
***AUTHOR Shampine, L. F., (SNLA)
Davenport, S. M., (SNLA)
Huddleston, R. E., (SNLL)
***DESCRIPTION
Abstract
Given a collection of points X(I) and a set of values Y(I) which
correspond to some function or measurement at each of the X(I),
subroutine PDA_DPOLFT computes the weighted least-squares polynomial
fits of all degrees up to some degree either specified by the user
or determined by the routine. The fits thus obtained are in
orthogonal polynomial form. Subroutine PDA_DP1VLU may then be
called to evaluate the fitted polynomials and any of their
derivatives at any point. The subroutine PDA_DPCOEF may be used to
express the polynomial fits as powers of (X-C) for any specified
point C.
The parameters for PDA_DPOLFT are
Input -- All TYPE REAL variables are DOUBLE PRECISION
N - the number of data points. The arrays X, Y and W
must be dimensioned at least N (N .GE. 1).
X - array of values of the independent variable. These
values may appear in any order and need not all be
distinct.
Y - array of corresponding function values.
W - array of positive values to be used as weights. If
W(1) is negative, PDA_DPOLFT will set all the weights
to 1.0, which means unweighted least squares error
will be minimized. To minimize relative error, the
user should set the weights to: W(I) = 1.0/Y(I)**2,
I = 1,...,N .
MAXDEG - maximum degree to be allowed for polynomial fit.
MAXDEG may be any non-negative integer less than N.
Note -- MAXDEG cannot be equal to N-1 when a
statistical test is to be used for degree selection,
i.e., when input value of EPS is negative.
EPS - specifies the criterion to be used in determining
the degree of fit to be computed.
(1) If EPS is input negative, PDA_DPOLFT chooses the
degree based on a statistical F test of
significance. One of three possible
significance levels will be used: .01, .05 or
.10. If EPS=-1.0 , the routine will
automatically select one of these levels based
on the number of data points and the maximum
degree to be considered. If EPS is input as
-.01, -.05, or -.10, a significance level of
.01, .05, or .10, respectively, will be used.
(2) If EPS is set to 0., PDA_DPOLFT computes the
polynomials of degrees 0 through MAXDEG .
(3) If EPS is input positive, EPS is the RMS
error tolerance which must be satisfied by the
fitted polynomial. PDA_DPOLFT will increase the
degree of fit until this criterion is met or
until the maximum degree is reached.
Output -- All TYPE REAL variables are DOUBLE PRECISION
NDEG - degree of the highest degree fit computed.
EPS - RMS error of the polynomial of degree NDEG .
R - vector of dimension at least N containing values
of the fit of degree NDEG at each of the X(I) .
Except when the statistical test is used, these
values are more accurate than results from subroutine
PDA_DP1VLU normally are.
IERR - error flag with the following possible values.
1 -- indicates normal execution, i.e., either
(1) the input value of EPS was negative, and the
computed polynomial fit of degree NDEG
satisfies the specified F test, or
(2) the input value of EPS was 0., and the fits of
all degrees up to MAXDEG are complete, or
(3) the input value of EPS was positive, and the
polynomial of degree NDEG satisfies the RMS
error requirement.
2 -- invalid input parameter. At least one of the input
parameters has an illegal value and must be corrected
before PDA_DPOLFT can proceed. Valid input results
when the following restrictions are observed
N .GE. 1
0 .LE. MAXDEG .LE. N-1 for EPS .GE. 0.
0 .LE. MAXDEG .LE. N-2 for EPS .LT. 0.
W(1)=-1.0 or W(I) .GT. 0., I=1,...,N .
3 -- cannot satisfy the RMS error requirement with a
polynomial of degree no greater than MAXDEG . Best
fit found is of degree MAXDEG .
4 -- cannot satisfy the test for significance using
current value of MAXDEG . Statistically, the
best fit found is of order NORD . (In this case,
NDEG will have one of the values: MAXDEG-2,
MAXDEG-1, or MAXDEG). Using a higher value of
MAXDEG may result in passing the test.
A - work and output array having at least 3N+3MAXDEG+3
locations
STATUS - Returned error status.
The status must be zero on entry. This
routine does not check the status on entry.
Note - PDA_DPOLFT calculates all fits of degrees up to and including
NDEG . Any or all of these fits can be evaluated or
expressed as powers of (X-C) using PDA_DP1VLU and PDA_DPCOEF
after just one call to PDA_DPOLFT .
***REFERENCES L. F. Shampine, S. M. Davenport and R. E. Huddleston,
Curve fitting by polynomials in one variable, Report
SLA-74-0270, Sandia Laboratories, June 1974.
***ROUTINES CALLED PDA_DP1VLU, PDA_XERMSG
***REVISION HISTORY (YYMMDD)
740601 DATE WRITTEN
890531 Changed all specific intrinsics to generic. (WRB)
891006 Cosmetic changes to prologue. (WRB)
891006 REVISION DATE from Version 3.2
891214 Prologue converted to Version 4.0 format. (BAB)
900315 CALLs to XERROR changed to CALLs to PDA_XERMSG. (THJ)
900911 Added variable YP to DOUBLE PRECISION declaration. (WRB)
920501 Reformatted the REFERENCES section. (WRB)
920527 Corrected erroneous statements in DESCRIPTION. (WRB)
950404 Implement status. (HME)
950517 Return immediately if PDA_DP1VLU returns a status. (HME)
***END PROLOGUE PDA_DPOLFT