Note: This page has been translated by MathWorks. Please click here

To view all translated materals including this page, select Japan from the country navigator on the bottom of this page.

To view all translated materals including this page, select Japan from the country navigator on the bottom of this page.

Usually, a spline is constructed from some information, like
function values and/or derivative values, or as the approximate solution
of some ordinary differential equation. But it is also possible to
make up a spline from scratch, by providing its knot sequence and
its coefficient sequence to the command `spmak`

.

For example, if you enter

sp = spmak(1:10,3:8);

you supply the uniform knot sequence `1:10`

and
the coefficient sequence `3:8`

. Because there are
10 knots and 6 coefficients, the order must be 4(= 10 – 6),
i.e., you get a cubic spline. The command

fnbrk(sp)

prints out the constituent parts of the B-form of this cubic spline, as follows:

knots(1:n+k) 1 2 3 4 5 6 7 8 9 10 coefficients(d,n) 3 4 5 6 7 8 number n of coefficients 6 order k 4 dimension d of target 1

Further, `fnbrk`

can be used to supply each
of these parts separately.

But the point of the Curve Fitting Toolbox™ spline functionality
is that there shouldn't be any need for you to look up these details.
You simply use `sp`

as an argument to commands that
evaluate, differentiate, integrate, convert, or plot the spline whose
description is contained in `sp`

.

The following commands are available for spline work. There
is `spmak`

and `fnbrk`

to make up a spline and take it
apart again. Use `fn2fm`

to
convert from B-form to ppform. You can evaluate, differentiate, integrate,
minimize, find zeros of, plot, refine, or selectively extrapolate
a spline with the aid of `fnval`

, `fnder`

, `fndir`

, `fnint`

, `fnmin`

, `fnzeros`

, `fnplt`

, `fnrfn`

,
and `fnxtr`

.

There are five commands for generating knot sequences:

`augknt`

for providing boundary knots and also controlling the multiplicity of interior knots`brk2knt`

for supplying a knot sequence with specified multiplicities`aptknt`

for providing a knot sequence for a spline space of given order that is suitable for interpolation at given data sites`optknt`

for providing an*optimal*knot sequence for interpolation at given sites`newknt`

for a knot sequence perhaps more suitable for the function to be approximated

In addition, there is:

`aveknt`

to supply certain knot averages (the Greville sites) as recommended sites for interpolation`chbpnt`

to supply such sites`knt2brk`

and`knt2mlt`

for extracting the breaks and/or their multiplicities from a given knot sequence

To display a spline *curve* with given two-dimensional
coefficient sequence and a uniform knot sequence, use `spcrv`

.

You can also write your own spline construction commands, in
which case you will need to know the following. The construction of
a spline satisfying some interpolation or approximation conditions
usually requires a *collocation matrix*,
i.e., the matrix that, in each row, contains the sequence of numbers *D*^{r}*B*_{j,k}(τ),
i.e., the * r*th derivative at τ of the

`spcol`

. An optional argument allows for this
matrix to be supplied by `spcol`

in a space-saving
spline-almost-block-diagonal-form or as a MATLAB`slvblk`

, a command for solving
linear systems with an almost-block-diagonal coefficient matrix. If
you are interested in seeing how `spcol`

and `slvblk`

are
used in this toolbox, have a look at the commands `spapi`

, `spap2`

,
and `spaps`

.In addition, there are routines for constructing *cubic* splines. `csapi`

and `csape`

provide
the cubic spline interpolant at knots to given data, using the not-a-knot
and various other end conditions, respectively. A parametric cubic
spline curve through given points is provided by `cscvn`

.
The cubic *smoothing* spline is constructed in `csaps`

.

As another simple example,

points = .95*[0 -1 0 1;1 0 -1 0]; sp = spmak(-4:8,[points points]);

provides a planar, quartic, spline curve whose middle part is a pretty good approximation to a circle, as the plot on the next page shows. It is generated by a subsequent

plot(points(1,:),points(2,:),'x'), hold on fnplt(sp,[0,4]), axis equal square, hold off

Insertion of additional control points $$\left(\pm 0.95,\pm 0.95\right)/\sqrt{1.9}$$ would make a visually perfect circle.

Here are more details. The spline curve
generated has the form Σ^{8}_{j=1}B_{j,5}* a*(:,

`4:8 `

the uniform knot sequence, and with its
control points To get a feeling for how close to circular this part of the
curve actually is, compute its unsigned curvature. The curvature κ(* t*)
at the curve point γ(

$$\kappa =\frac{\left|x\text{'}y\text{'}\text{'}-y\text{'}x\text{'}\text{'}\right|}{{(x{\text{'}}^{2}+y{\text{'}}^{2})}^{3/2}}$$

in which x', x″, y', and y" are the first and
second derivatives of the curve with respect to the parameter used
(* t*). Treat the planar curve as a space curve in
the (

t = linspace(0,4,21);zt = zeros(size(t)); dsp = fnder(sp); dspt = fnval(dsp,t); ddspt = fnval(fnder(dsp),t); kappa = abs(dspt(1,:).*ddspt(2,:)-dspt(2,:).*ddspt(1,:))./... (sum(dspt.^2)).^(3/2); [min(kappa),max(kappa)] ans = 1.6747 1.8611

So, while the curvature is not quite constant, it is close to 1/radius of the circle, as you see from the next calculation:

1/norm(fnval(sp,0)) ans = 1.7864

**Spline Approximation to a Circle; Control Points
Are Marked x**

Was this topic helpful?