Index Page hrmint_c

A B C D E F G H I J K L M N O P Q R S T U V W X

Procedure Abstract Required_Reading Keywords Brief_I/O Detailed_Input | Detailed_Output Parameters Exceptions Files Particulars Examples | Restrictions Literature_References Author_and_Institution Version Index_Entries

#### Procedure

       void hrmint_c ( SpiceInt            n,
                       ConstSpiceDouble  * xvals,
                       ConstSpiceDouble  * yvals,
                       SpiceDouble         x,
                       SpiceDouble       * work,
                       SpiceDouble       * f,
                       SpiceDouble       * df )

#### Abstract

       Evaluate a Hermite interpolating polynomial at a specified
       abscissa value.

#### Required_Reading

       None.

#### Keywords

       INTERPOLATION
       MATH
       POLYNOMIAL

#### Brief_I/O

       Variable  I/O  Description
       --------  ---  --------------------------------------------------
       n          I   Number of points defining the polynomial.
       xvals      I   Abscissa values.
       yvals      I   Ordinate and derivative values.
       x          I   Point at which to interpolate the polynomial.
       work      I-O  Work space array.
       f          O   Interpolated function value at x.
       df         O   Interpolated function's derivative at x.

#### Detailed_Input

       n              is the number of points defining the polynomial.
                      The arrays xvals and yvals contain n and 2*n
                      elements respectively.

       xvals          is an array of length n containing abscissa values.

       yvals          is an array of length 2*n containing ordinate and
                      derivative values for each point in the domain
                      defined by xvals and n. The elements

                         yvals[ 2*i    ]
                         yvals[ 2*i +1 ]

                      give the value and first derivative of the output
                      polynomial at the abscissa value

                         xvals[i]

                      where i ranges from 0 to n - 1.

       work           is a work space array.  It is used by this routine
                      as a scratch area to hold intermediate results.
                      Generally sized at number of elements in yvals
                      time two.

       x              is the abscissa value at which the interpolating
                      polynomial and its derivative are to be evaluated.

#### Detailed_Output

       f,
       df             are the value and derivative at x of the unique
                      polynomial of degree 2n-1 that fits the points and
                      derivatives defined by xvals and yvals.

#### Parameters

       None.

#### Exceptions

       1)  The error SPICE(DIVIDEBYZERO) signals from a routine
           in the call tree if two input abscissas are equal,

       2)  The error SPICE(INVALIDSIZE) signals from a routine
           in the call tree if n is less than 1.

       3)  This routine does not attempt to ward off or diagnose
           arithmetic overflows.

#### Files

       None.

#### Particulars

       Users of this routine must choose the number of points to use
       in their interpolation method.  The authors of Reference [1] have
       this to say on the topic:

          Unless there is solid evidence that the interpolating function
          is close in form to the true function f, it is a good idea to
          be cautious about high-order interpolation.  We
          enthusiastically endorse interpolations with 3 or 4 points, we
          are perhaps tolerant of 5 or 6; but we rarely go higher than
          that unless there is quite rigorous monitoring of estimated
          errors.

       The same authors offer this warning on the use of the
       interpolating function for extrapolation:

          ...the dangers of extrapolation cannot be overemphasized:
          An interpolating function, which is perforce an extrapolating
          function, will typically go berserk when the argument x is
          outside the range of tabulated values by more than the typical
          spacing of tabulated points.

#### Examples

       Example:

          Fit a 7th degree polynomial through the points ( x, y, y' )

               ( -1,      6,       3 )
               (  0,      5,       0 )
               (  3,   2210,    5115 )
               (  5,  78180,  109395 )

          and evaluate this polynomial at x = 2.

          #include <stdio.h>
          #include "SpiceUsr.h"

          int main()
             {

             /.
             Local variables.
             ./
             SpiceDouble      answer;
             SpiceDouble      deriv;
             SpiceDouble      xvals [] = {-1., 0., 3., 5.};
             SpiceDouble      yvals [] = {6., 3., 5., 0.,
                                          2210., 5115., 78180., 109395.};
             SpiceDouble      work  [2*8];
             SpiceDouble      x = 2;
             SpiceInt         n = 4;

             hrmint_c ( n, xvals, yvals, x, work, &answer, &deriv );

             printf( "answer = %lf\n", answer );
             printf( "deriv  = %lf\n", deriv );

             return(0);
             }

          The returned value of 'answer' should be 141., and the returned
          value of 'deriv' should be 456., since the unique 7th degree
          polynomial that fits these constraints is

                       7       2
             f(x)  =  x   +  2x  + 5

#### Restrictions

       None.

#### Literature_References

       [1]  "Numerical Recipes---The Art of Scientific Computing" by
             William H. Press, Brian P. Flannery, Saul A. Teukolsky,
             William T. Vetterling (see sections 3.0 and 3.1).

       [2]  "Elementary Numerical Analysis---An Algorithmic Approach"
             by S. D. Conte and Carl de Boor.  See p. 64.

#### Author_and_Institution

        N.J. Bachman    (JPL)
        E.D. Wright     (JPL)

#### Version

       -CSPICE Version 1.0.0, 24-AUG-2015 (EDW)

#### Index_Entries

       interpolate function using Hermite polynomial
       Hermite interpolation

#### Link to routine hrmint_c source file hrmint_c.c

    Wed Apr  5 17:54:36 2017