Interpolation with Curve Fitting Toolbox
Interpolation is a process for estimating values that lie between known data points.
Interpolation involves creating of a function f that matches given data values yi at given data sites xi where f(xi) = yi, for all i.
Most interpolation methods create the interpolant f as the unique function of the formula
where the form of the functions fj depends on the interpolation method.
For spline interpolation, the fj are the n consecutive B-splines Bj(x) = B(x|tj,...,tj+k), j = 1:n, of order k for a knot sequence t1 ≤ t2 ≤ ... ≤ tn + k.
About Interpolation Methods
Curve Fitting Toolbox™ supports the interpolation methods described in the following table.
Method | Description |
---|---|
Nearest neighbor | Nearest neighbor interpolation. This method sets the value of an interpolated point to the value of the nearest data point. |
Linear | Linear interpolation. This method fits a different linear polynomial between each pair of data points for curves, or between sets of three points for surfaces. |
Natural neighbor | Natural neighbor interpolation. This method sets the value of an interpolated point to a weighted average of the nearest data points. The interpolating surface is C1 continuous, except at the sample points. |
Shape-preserving (PCHIP) | Piecewise cubic Hermite interpolation (PCHIP). This method preserves monotonicity and the shape of the data (for curves only). |
Cubic spline | Cubic spline interpolation. This method fits a different cubic polynomial between each pair of data points for curves, or between sets of three points for surfaces. |
Biharmonic (v4) | MATLAB® 4 |
Thin-plate spline | Thin-plate spline interpolation. This method fits smooth surfaces that also extrapolate well (for surfaces only). |
Interpolant surface fits use the MATLAB function scatteredInterpolant
for the linear,
nearest neighbor, and natural neighbor methods, and the MATLAB function griddata
for the cubic spline and
biharmonic methods. The thin-plate spline method uses the tpaps
function.
The interpolant method you use depends on several factors, including the characteristics of the data being fit, the required smoothness of the curve, speed considerations, and post-fit analysis requirements. The linear and nearest neighbor methods fit models efficiently, and the resulting curves are not very smooth. The natural neighbor, cubic spline, shape-preserving, and biharmonic methods take longer to fit models, and the resulting curves are very smooth.
For example, the following plot shows a nearest neighbor interpolant fit and a
shape-preserving (PCHIP) interpolant fit for the nuclear reaction data from the
carbon12alpha.mat
sample data set. The nearest neighbor
interpolant is not as smooth as the shape-preserving interpolant.
Note
Goodness-of-fit statistics, prediction bounds, and weights are not defined for interpolants. Additionally, the fit residuals are always 0 (within computer precision) because interpolants pass through the data points.
Biharmonic interpolant fits consist of radial basis function interpolants. All other interpolants supported by Curve Fitting Toolbox are piecewise polynomials and consist of multiple polynomials defined between data points. For cubic spline and PCHIP interpolation, four coefficients describe each piece. Curve Fitting Toolbox uses a cubic (third-degree) polynomial to calculate the four coefficients. Refer to the following for more information:
spline
for cubic spline interpolationpchip
for shape-preserving (PCHIP) interpolation, and for a comparison of PCHIP and cubic spline interpolationscatteredInterpolant
,griddata
, andtpaps
for surface interpolationIt is possible to fit a single polynomial interpolant to data, with a degree one less than the number of data points. However, the behavior of such fits is unpredictable between data points. Piecewise polynomials with lower-order segments do not diverge significantly from the fitting data domain, so they are useful for analyzing a wider range of data sets.
Selecting an Interpolant Fit
Select Interpolant Fit Interactively
Open the Curve Fitter app by entering curveFitter
at the
MATLAB command line. Alternatively, on the Apps tab, in the Math, Statistics and
Optimization group, click Curve Fitter.
On the Curve Fitter tab, in the Fit Type section, select an Interpolant fit. The app fits an interpolating curve or surface that passes through every data point.
In the Fit Options pane, you can specify the Interpolation method value.
For curve data, you can set Interpolation method to
Linear
, Nearest neighbor
,
Cubic spline
, or Shape-preserving
(PCHIP)
. For surface data, you can set Interpolation
method to Linear
, Nearest
neighbor
, Natural neighbor
, Cubic
spline
, Biharmonic (v4)
, or Thin-plate
spline
.
For surfaces, the Interpolant fit uses the scatteredInterpolant
function for
the Linear
, Nearest neighbor
, and
Natural neighbor
methods, the griddata
function for the
Cubic Spline
and Biharmonic (v4)
methods, and the tpaps
function for the
Thin-plate spline
method. Try the Thin-plate
spline
method when you require both smooth surface interpolation
and good extrapolation properties.
Tip
If your data variables have very different scales, clear the
Center and scale check box to see the
difference in the fit. Normalizing the inputs might influence the
results of the piecewise Linear
and Cubic
Spline
interpolation methods, and the Nearest
neighbor
and Natural neighbor
surface
interpolation methods.
Fit Linear Interpolant Model Using the fit
Function
Load the census
sample data set.
load census
The variables pop
and cdate
contain data for the population size and the year the census was taken, respectively.
You can use the fit
function to fit any of the interpolant models described in Interpolant Model Names. In this case, fit a linear interpolant model using the 'linearinterp'
option, and then plot the result.
f = fit(cdate,pop,'linearinterp');
plot(f,cdate,pop);
Compare Linear Interpolant Models
Load the carbon12alpha
sample data set. Create both nearest neighbor and PCHIP interpolant fits using the 'nearestinterp'
and 'pchip'
options.
load carbon12alpha f1 = fit(angle,counts,'nearestinterp'); f2 = fit(angle,counts,'pchip');
Compare the fitted curves f1
and f2
by plotting them in the same figure.
p1 = plot(f1,angle,counts); xlim([min(angle),max(angle)]) hold on p2 = plot(f2,'b'); hold off legend([p1;p2],'Counts per Angle','Nearest Neighbor','PCHIP',... 'Location','northwest')