Next: Multi-dimensional Interpolation, Up: Interpolation [Contents][Index]

Octave supports several methods for one-dimensional interpolation, most of which are described in this section. Polynomial Interpolation and Interpolation on Scattered Data describe additional methods.

- Function File:
`yi`=**interp1***(*`x`,`y`,`xi`) - Function File:
`yi`=**interp1***(*`y`,`xi`) - Function File:
`yi`=**interp1***(…,*`method`) - Function File:
`yi`=**interp1***(…,*`extrap`) - Function File:
`pp`=**interp1***(…, "pp")* -
One-dimensional interpolation. Interpolates to determine the value of

`yi`at the points,`xi`. If not specified,`x`is taken to be the indices of`y`. If`y`is a matrix or an N-dimensional array, the interpolation is performed on each column of`y`.Method is one of:

`"nearest"`

Return the nearest neighbor.

`"linear"`

Linear interpolation from nearest neighbors

`"pchip"`

Piecewise cubic Hermite interpolating polynomial

`"cubic"`

Cubic interpolation (same as

`pchip`

)`"spline"`

Cubic spline interpolation—smooth first and second derivatives throughout the curve

Appending ’*’ to the start of the above method forces

`interp1`

to assume that`x`is uniformly spaced, and only

and`x`(1)

are referenced. This is usually faster, and is never slower. The default method is`x`(2)`"linear"`

.If

`extrap`is the string`"extrap"`

, then extrapolate values beyond the endpoints. If`extrap`is a number, replace values beyond the endpoints with that number. If`extrap`is missing, assume NA.If the string argument

`"pp"`

is specified, then`xi`should not be supplied and`interp1`

returns the piecewise polynomial that can later be used with`ppval`

to evaluate the interpolation. There is an equivalence, such that`ppval (interp1 (`

.`x`,`y`,`method`,`"pp"`

),`xi`) == interp1 (`x`,`y`,`xi`,`method`,`"extrap"`

)Duplicate points in

`x`specify a discontinuous interpolant. There may be at most 2 consecutive points with the same value. If`x`is increasing, the default discontinuous interpolant is right-continuous. If`x`is decreasing, the default discontinuous interpolant is left-continuous. The continuity condition of the interpolant may be specified by using the options,`"-left"`

or`"-right"`

, to select a left-continuous or right-continuous interpolant, respectively. Discontinuous interpolation is only allowed for`"nearest"`

and`"linear"`

methods; in all other cases, the`x`-values must be unique.An example of the use of

`interp1`

isxf = [0:0.05:10]; yf = sin (2*pi*xf/5); xp = [0:10]; yp = sin (2*pi*xp/5); lin = interp1 (xp, yp, xf); spl = interp1 (xp, yp, xf, "spline"); cub = interp1 (xp, yp, xf, "cubic"); near = interp1 (xp, yp, xf, "nearest"); plot (xf, yf, "r", xf, lin, "g", xf, spl, "b", xf, cub, "c", xf, near, "m", xp, yp, "r*"); legend ("original", "linear", "spline", "cubic", "nearest");

**See also:**interpft.

There are some important differences between the various interpolation
methods. The `"spline"`

method enforces that both the first and second
derivatives of the interpolated values have a continuous derivative,
whereas the other methods do not. This means that the results of the
`"spline"`

method are generally smoother. If the function to be
interpolated is in fact smooth, then `"spline"`

will give excellent
results. However, if the function to be evaluated is in some manner
discontinuous, then `"pchip"`

interpolation might give better results.

This can be demonstrated by the code

t = -2:2; dt = 1; ti =-2:0.025:2; dti = 0.025; y = sign (t); ys = interp1 (t,y,ti,"spline"); yp = interp1 (t,y,ti,"pchip"); ddys = diff (diff (ys)./dti) ./ dti; ddyp = diff (diff (yp)./dti) ./ dti; figure (1); plot (ti,ys,"r-", ti,yp,"g-"); legend ("spline", "pchip", 4); figure (2); plot (ti,ddys,"r+", ti,ddyp,"g*"); legend ("spline", "pchip");

The result of which can be seen in Figure 29.1 and Figure 29.2.

Fourier interpolation, is a resampling technique where a signal is converted to the frequency domain, padded with zeros and then reconverted to the time domain.

- Function File:
**interpft***(*`x`,`n`) - Function File:
**interpft***(*`x`,`n`,`dim`) -
Fourier interpolation. If

`x`is a vector, then`x`is resampled with`n`points. The data in`x`is assumed to be equispaced. If`x`is a matrix or an N-dimensional array, the interpolation is performed on each column of`x`. If`dim`is specified, then interpolate along the dimension`dim`.`interpft`

assumes that the interpolated function is periodic, and so assumptions are made about the endpoints of the interpolation.**See also:**interp1.

There are two significant limitations on Fourier interpolation. Firstly,
the function signal is assumed to be periodic, and so non-periodic
signals will be poorly represented at the edges. Secondly, both the
signal and its interpolation are required to be sampled at equispaced
points. An example of the use of `interpft`

is

t = 0 : 0.3 : pi; dt = t(2)-t(1); n = length (t); k = 100; ti = t(1) + [0 : k-1]*dt*n/k; y = sin (4*t + 0.3) .* cos (3*t - 0.1); yp = sin (4*ti + 0.3) .* cos (3*ti - 0.1); plot (ti, yp, "g", ti, interp1 (t, y, ti, "spline"), "b", ... ti, interpft (y, k), "c", t, y, "r+"); legend ("sin(4t+0.3)cos(3t-0.1)", "spline", "interpft", "data");

which demonstrates the poor behavior of Fourier interpolation for non-periodic functions, as can be seen in Figure 29.3.

In addition, the support functions `spline`

and `lookup`

that
underlie the `interp1`

function can be called directly.

- Function File:
`pp`=**spline***(*`x`,`y`) - Function File:
`yi`=**spline***(*`x`,`y`,`xi`) Return the cubic spline interpolant of points

`x`and`y`.When called with two arguments, return the piecewise polynomial

`pp`that may be used with`ppval`

to evaluate the polynomial at specific points. When called with a third input argument,`spline`

evaluates the spline at the points`xi`. The third calling form`spline (`

is equivalent to`x`,`y`,`xi`)`ppval (spline (`

.`x`,`y`),`xi`)The variable

`x`must be a vector of length`n`.`y`can be either a vector or array. If`y`is a vector it must have a length of either`n`or

. If the length of`n`+ 2`y`is`n`, then the "not-a-knot" end condition is used. If the length of`y`is

, then the first and last values of the vector`n`+ 2`y`are the values of the first derivative of the cubic spline at the endpoints.If

`y`is an array, then the size of`y`must have the form`[`

or`s1`,`s2`, …,`sk`,`n`]`[`

. The array is reshaped internally to a matrix where the leading dimension is given by`s1`,`s2`, …,`sk`,`n`+ 2]

and each row of this matrix is then treated separately. Note that this is exactly opposite to`s1`*`s2`* … *`sk``interp1`

but is done for MATLAB compatibility.

Next: Multi-dimensional Interpolation, Up: Interpolation [Contents][Index]