## MSfIntMC

#### Routine

void MSfIntMC (const float x[], const float y[], int N, const float xi[], float yi[], int Ni)

#### Purpose

Interpolate a table of values using a piecewise monotonic cubic interpolant

#### Description

This routine calculates interpolated values for a function defined by a table of reference data values. The interpolated values are found by passing a piecewise monotonic cubic interpolant through the reference data values. The monotonicity property guarantees that the interpolated data values do not go outside the range of the bracketing reference data values.

The procedure defines the cubic interpolant between any two adjacent reference points in terms of the values and the derivatives at the reference points. The derivatives at the reference points are determined by averaging the inverse slopes of the straight line segments joining the reference points to the left and right of a given reference point. These slope values are changed if necessary to guarantee that the cubic interpolants are monotonic between reference points. For instance a reference point is a local extremum (the slopes of the straight line segments joining reference points on either side of it are of different sign), the slope at that reference point is set to zero. The slope of end points is determined from the slopes of the two straight lines joining the reference points beside the end point.

References:
  Subroutine PCHIM, F. N. Fritsch, Lawrence Livermore National Laboratory. F. N. Fritsch and J. Butland, "A method for constructing local monotone piecewise cubic interpolants", SIAM J. Sci. Stat. Comput., vol. 5, pp. 300-304, June 1984.

#### Parameters

-> const float x[]
  Abscissa values for the reference points. These values must be in increasing order.
-> const float y[]
  Ordinate values for the reference points
-> int N
  Number of reference points
-> const float xi[]
  Abscissa values for the interpolated points. These values must be bounded by x[0] and x[N-1]. The values xi[i] need not be in any particular order, although some efficiency is gained if they are in increasing or decreasing order.
<- float yi[]
  Resulting interpolated ordinate values
-> int Ni
  Number of interpolated values

#### Author / revision

P. Kabal / Revision 1.23 2003/11/11

Main Index libtsp