Table of contents
CSPICE_CHBVAL returns the value of a polynomial evaluated at the input
`x' using the coefficients for the Chebyshev expansion of the
polynomial.
Given:
cp an array of coefficients a polynomial with respect to the
Chebyshev basis.
help, cp
DOUBLE = Array[degp+1]
The polynomial to be evaluated is assumed to be of the form:
cp[degp]*T(degp,s) + cp[degp-1]*T(degp-1,s) + ...
+ cp[1]*T(1,s) + cp[0]*T(0,s)
where T(i,s) is the i'th Chebyshev polynomial
evaluated at a number `s' whose double precision
value lies between -1 and 1. The value of `s' is
computed from the input variables x2s[0], x2s[1]
and `x'.
degp the degree of the Chebyshev polynomial to be evaluated.
help, degp
LONG = Scalar
x2s an array of two parameters.
help, x2s
DOUBLE = Array[2]
These parameters are used to transform the domain of the
input variable `x' into the standard domain of the Chebyshev
polynomial. x2s[0] should be a reference point in the domain
of `x'; x2s[1] should be the radius by which points are
allowed to deviate from the reference point and while
remaining within the domain of `x'. The value of `x' is
transformed into the value `s' given by
s = ( x - x2s[0] ) / x2s[1]
Typically x2s[0] is the midpoint of the interval over
which `x' is allowed to vary and x2s[1] is the radius of
the interval.
The main reason for doing this is that a Chebyshev
expansion is usually fit to data over a span
from A to B where A and B are not -1 and 1
respectively. Thus to get the "best fit" the
data was transformed to the interval [-1,1] and
coefficients generated. These coefficients are
not rescaled to the interval of the data so that
the numerical "robustness" of the Chebyshev fit will
not be lost. Consequently, when the "best fitting"
polynomial needs to be evaluated at an intermediate
point, the point of evaluation must be transformed
in the same way that the generating points were
transformed.
x the value for which the polynomial is to be evaluated.
help, x
DOUBLE = Scalar
the call:
cspice_chbval, cp, degp, x2s, x, p
returns:
p the value of the polynomial to be evaluated.
help, p
DOUBLE = Scalar
It is given by
cp[degp]*T(degp,s) + cp[degp-1]*T(degp-1,s) + ...
+ cp[1]*T(1,s) + cp[0]*T(0,s)
where T(i,s) is the i'th Chebyshev polynomial
evaluated at a number s = ( x - x2s[0] )/x2s[1]
None.
Any numerical results shown for this example may differ between
platforms as the results depend on the SPICE kernels used as input
and the machine specific arithmetic implementation.
1) Depending upon the user's needs, there are 3 routines
available for evaluating Chebyshev polynomials.
cspice_chbval for evaluating a Chebyshev polynomial when no
derivatives are desired.
cspice_chbint for evaluating a Chebyshev polynomial and its
first derivative.
cspice_chbder for evaluating a Chebyshev polynomial and a user
or application dependent number of derivatives.
Of these 3 the one most commonly employed by SPICE software
is cspice_chbint as it is used to interpolate ephemeris state
vectors; this requires the evaluation of a polynomial
and its derivative. When no derivatives are desired one
should use cspice_chbval, or when more than one or an unknown
number of derivatives are desired one should use cspice_chbder.
The code example below illustrates how this routine might
be used to obtain points for plotting a polynomial.
Example code begins here.
PRO chbval_ex1
;;
;; Set the coefficients of the polynomial and its
;; transformation parameters
;;
cp = [1.D0,3.D0,0.5D0,1.D0,0.5D0,-1.D0,1.D0]
x2s = [0.5D0,3.D0]
degp = 6L
x = 1.D0
cspice_chbval, cp, degp, x2s, x, p
print, format='(A,F10.6)', 'Value of the polynomial at x=1: ', p
END
When this program was executed on a Mac/Intel/IDL8.x/64-bit
platform, the output was:
Value of the polynomial at x=1: -0.340878
This routine computes the value `p' given by
cp[degp]*T(degp,s) + cp[degp-1]*T(degp-1,s) + ...
+ cp[1]*T(1,s) + cp[0]*T(0,s)
where
s = ( x - x2s[0] ) / x2s[1]
and
T(i,s) is the i'th Chebyshev polynomial of the first kind
evaluated at `s'.
1) If any of the input arguments, `cp', `degp', `x2s' or `x', is
undefined, an error is signaled by the IDL error handling
system.
2) If any of the input arguments, `cp', `degp', `x2s' or `x', is
not of the expected type, or it does not have the expected
dimensions and size, an error is signaled by the Icy
interface.
3) If the output argument `p' is not a named variable, an error
is signaled by the Icy interface.
4) If the number of elements in `cp' is less than degp+1, an error
is signaled by the Icy interface.
None.
1) One needs to be careful that the value
(x-x2s[0]) / x2s[1]
lies between -1 and 1. Otherwise, the routine may fail
spectacularly (for example with a floating point overflow).
ICY.REQ
[1] W. Press, B. Flannery, S. Teukolsky and W. Vetterling,
"Numerical Recipes -- The Art of Scientific Computing,"
chapter 5.4, "Recurrence Relations and Clenshaw's Recurrence
Formula," p 161, Cambridge University Press, 1986.
[2] T. Rivlin, "The Chebyshev Polynomials," Wisley, 1974.
[3] R. Weast and S. Selby, "CRC Handbook of Tables for
Mathematics," 4th Edition, CRC Press, 1976.
J. Diaz del Rio (ODC Space)
-Icy Version 1.0.0, 16-JUL-2021 (JDR)
value of a chebyshev polynomial expansion
|