hrmint_c |

## Procedurevoid hrmint_c ( SpiceInt n, ConstSpiceDouble * xvals, ConstSpiceDouble * yvals, SpiceDouble x, SpiceDouble * work, SpiceDouble * f, SpiceDouble * df ) ## AbstractEvaluate a Hermite interpolating polynomial at a specified abscissa value. ## Required_ReadingNone. ## KeywordsINTERPOLATION MATH POLYNOMIAL ## Brief_I/OVariable 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_Inputn 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_Outputf, 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. ## ParametersNone. ## Exceptions1) 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. ## FilesNone. ## ParticularsUsers 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. ## ExamplesExample: 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; ## RestrictionsNone. ## 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_InstitutionN.J. Bachman (JPL) E.D. Wright (JPL) ## Version-CSPICE Version 1.0.0, 24-AUG-2015 (EDW) ## Index_Entriesinterpolate function using Hermite polynomial Hermite interpolation |

Wed Apr 5 17:54:36 2017