MATLAB Function Reference
spline

Cubic spline data interpolation

Syntax

• ```yy = spline(x`,`y`,`xx)
pp = spline(x`,`y)
```

Description

```yy = spline(x,y,xx) ``` uses cubic spline interpolation to find `yy`, the values of the underlying function `y` at the points in the vector `xx`. The vector `x` specifies the points at which the data `y` is given. If `y` is a matrix, then the data is taken to be vector-valued and interpolation is performed for each row of `y`. For this case, `length(x)` must equal `size(y,2)`, and `yy` is `size(y,1)`-by-`length(xx)`.

 Note    This is the opposite of the `interp1(x,y,xx,'spline')` function which performs the interpolation for each column of matrix `y`. For this function, `length(x)` must equal `size(y,1)`, and the resulting `yy` is `length(xx)`-by-`size(y,2)`.

```pp = spline(x,y) ``` returns the piecewise polynomial form of the cubic spline interpolant for later use with `ppval` and the spline utility `unmkpp`.

Ordinarily, the not-a-knot end conditions are used. However, if `y` contains two more values than `x` has entries, then the first and last value in `y` are used as the endslopes for the cubic spline. Namely:

• ```f(x) = y(:,2:end-1), df(min(x)) = y(:,1), df(max(x)) = y(:,end)
```

Examples

Example 1. This generates a sine curve, then samples the spline over a finer mesh.

• ```x = 0:10;
y = sin(x);
xx = 0:.25:10;
yy = spline(x,y,xx);
plot(x,y,'o',xx,yy)

```

Example 2. This illustrates the use of clamped or complete spline interpolation where end slopes are prescribed. Zero slopes at the ends of an interpolant to the values of a certain distribution are enforced.

• ```x = -4:4;
y = [0 .15 1.12 2.36 2.36 1.46 .49 .06 0];
cs = spline(x,[0 y 0]);
xx = linspace(-4,4,101);
plot(x,y,'o',xx,ppval(cs,xx),'-');

```

Example 3. The two vectors

• ```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 ];
```

represent the census years from 1900 to 1990 and the corresponding United States population in millions of people. The expression

• ```spline(t`,`p`,`2000)
```

uses the cubic spline to extrapolate and predict the population in the year 2000. The result is

• ```ans =
270.6060
```

Example 4. The statements

• ```x = pi*[0:.5:2];
y = [0  1  0 -1  0  1  0;
1  0  1  0 -1  0  1];
pp = spline(x,y);
yy = ppval(pp, linspace(0,2*pi,101));
plot(yy(1,:),yy(2,:),'-b',y(1,2:5),y(2,2:5),'or'), axis equal
```

generate the plot of a circle, with the five data points `y(:,2),...,y(:,6) `marked with o's. Note that this `y` contains two more values (i.e., two more columns) than does `x`, hence `y(:,1)` and `y(:,end)` are used as endslopes.

Algorithm

A tridiagonal linear system (with, possibly, several right sides) is being solved for the information needed to describe the coefficients of the various cubic polynomials which make up the interpolating spline. `spline` uses the functions `ppval`, `mkpp`, and `unmkpp`. These routines form a small suite of functions for working with piecewise polynomials. For access to more advanced features, see the M-file help for these functions and the Spline Toolbox.

`interp1`, `ppval`, `mkpp`, `unmkpp`