MATLAB Function Reference | ![]() ![]() |
One-dimensional data interpolation (table lookup)
Syntax
yi = interp1(x,Y,xi) yi = interp1(Y,xi) yi = interp1(x,Y,xi,method) yi = interp1(x,Y,xi,method,'extrap') yi = interp1(x,Y,xi,method,extrapval)
Description
returns vector yi = interp1(x,Y,xi)
yi
containing elements corresponding to the elements of xi
and determined by interpolation within vectors x
and Y
. The vector x
specifies the points at which the data Y
is given. If Y
is a matrix, then the interpolation is performed for each column of Y
and yi
is length(xi)
-by-size(Y,2)
.
yi = interp1(Y,xi)
assumes that x = 1:N
, where N
is the length of Y
for vector Y
, or size(Y,1)
for matrix Y
.
interpolates using alternative methods:yi = interp1(x,Y,xi,
method
)
For the 'nearest'
, 'linear'
, and 'v5cubic'
methods, interp1(x,Y,xi,method)
returns NaN
for any element of xi
that is outside the interval spanned by x
. For all other methods, interp1
performs extrapolation for out of range values.
yi = interp1(x,Y,xi,method,'extrap')
uses the specified method to perform extrapolation for out of range values.
yi = interp1(x,Y,xi,method,extrapval)
returns the scalar extrapval
for out of range values. NaN
and 0
are often used for extrapval
.
The interp1
command interpolates between data points. It finds values at intermediate points, of a one-dimensional function f(x) that underlies the data. This function is shown below, along with the relationship between vectors x
, Y
, xi
, and yi
.
Interpolation is the same operation as table lookup. Described in table lookup terms, the table is [x,Y]
and interp1
looks up the elements of xi
in x
, and, based upon their locations, returns values yi
interpolated within the elements of Y
.
Examples
Example 1. Generate a coarse sine curve and interpolate over a finer abscissa.
x = 0:10; y = sin(x); xi = 0:.25:10; yi = interp1(x,y,xi); plot(x,y,'o',xi,yi)
Example 2. Here are two vectors representing the census years from 1900 to 1990 and the corresponding United States population in millions of people.
t = 1900:10:1990; p = [75.995 91.972 105.711 123.203 131.669... 150.697 179.323 203.212 226.505 249.633];
The expression interp1(t,p,1975)
interpolates within the census data to estimate the population in 1975. The result is
ans = 214.8585
Now interpolate within the data at every year from 1900 to 2000, and plot the result.
x = 1900:1:2000; y = interp1(t,p,x,'spline'); plot(t,p,'o',x,y)
Sometimes it is more convenient to think of interpolation in table lookup terms, where the data are stored in a single table. If a portion of the census data is stored in a single 5-by-2 table,
tab = 1950 150.697 1960 179.323 1970 203.212 1980 226.505 1990 249.633
then the population in 1975, obtained by table lookup within the matrix tab
, is
p = interp1(tab(:,1),tab(:,2),1975) p = 214.8585
Algorithm
The interp1
command is a MATLAB M-file. The 'nearest'
and 'linear'
methods have straightforward implementations.
For the 'spline'
method, interp1
calls a function spline
that uses the functions ppval
, mkpp
, and unmkpp
. These routines form a small suite of functions for working with piecewise polynomials. spline
uses them to perform the cubic spline interpolation. For access to more advanced features, see the spline
reference page, the M-file help for these functions, and the Spline Toolbox.
For the 'pchip'
and 'cubic'
methods, interp1
calls a function pchip
that performs piecewise cubic interpolation within the vectors x
and y
. This method preserves monotonicity and the shape of the data. See the pchip
reference page for more information.
See Also
interpft
, interp2
, interp3
, interpn
, pchip
, spline
References
[1] de Boor, C., A Practical Guide to Splines, Springer-Verlag, 1978.
![]() | int8, int16, int32 | interp2 | ![]() |