help mata mm_polint()


mm_polint() -- Polynomial interpolation and extrapolation


real vector mm_polint(x, y, xnew [, degree])


x: real vector containing strictly monotone increasing or decreasing x-values

y: real vector containing associated y-values

xnew: real vector containing evaluation points

d: real scalar specifying degree of the polynomial (default: 1)


mm_polint() evaluates the interpolating polynomial through d+1 (x,y)-points at the value xnew. x should be strictly monotone increasing or decreasing. The set of data points is chosen such that the x-values are centered around xnew. However, the set is bounded by 1 at the left and length(x) at the right. Furthermore, choosing a centered set of data points is only possible if d is uneven. In this case (d+1)/2 points are on each side of xnew. If d is even and x is in ascending order, then d/2+1 points are below xnew and d/2 above. If x is in descending order d/2 points are below and d/2+1 above. Therefore, if d is even, the returned result depends on whether x is increasing or decreasing.

d is the degree of the polynomial. The default is to use a polynomial of degree one, i.e. to compute the linear interpolation (d=1).


mm_polint() is based on a translation into Mata of the polint rountine given in Press et al. (1992:109-110).


mm_polint(x, y, xnew, degree): x: n x 1 or 1 x n y: n x 1 or 1 x n xnew: m x 1 or 1 x m degree: 1 x 1 result: m x 1 or 1 x m.


mm_polint() requires x be in ascending or descending order.

d must be an integer equal to one or larger and must be smaller than the number of input data points (i.e., d<length(x)).

Source code



Press, William H., Saul A. Teukolsky, William T. Vetterling, Brian P. Flannery (1992). Numerical Recipes in C. The Art of Scientific Computing. Second Edition. Cambridge University Press.


Ben Jann, ETH Zurich,

Also see

Online: help for ipolate, mm_ipolate(), spline3(), [M-4] utility,