spline(n) | BLT Built-In Commands | spline(n) |

A spline is a device used in drafting to produce smoothed
curves. The points of the curve, known as *knots*, are fixed
and the *spline*, typically a thin strip of wood or metal, is
bent around the knots to create the smoothed curve. Spline
interpolation is the mathematical equivalent. The curves between
adjacent knots are piecewise functions such that the resulting
spline runs exactly through all the knots. The order and
coefficients of the polynominal determine the "looseness" or
"tightness" of the curve fit from the line segments formed by the
knots.

The **spline** command performs spline interpolation using
cubic ("natural") or quadratic polynomial functions. It computes
the spline based upon the knots, which are given as x and y
vectors. The interpolated new points are determined by another
vector which represents the abscissas (x-coordinates) or the new
points. The ordinates (y-coordinates) are interpolated using the
spline and written to another vector.

# Create sample data of ten points.

vector x(10) y(10)

for {set i 10} {$i > 0} {incr i -1} {

set x($i-1) [expr $i*$i]

set y($i-1) [expr sin($i*$i*$i)]

}

x sort y

A third vector is needed to indicate the abscissas (x-coordinates) of the new points to be interpolated by the spline. Like the x vector, the vector of abscissas must be monotonically increasing. All the abscissas must lie between the first and last knots (x vector) forming the spline.

How the abscissas are picked is arbitrary. But if we are going
to plot the spline, we will want to include the knots too. Since
both the quadratic and natural splines preserve the knots (an
abscissa from the x vector will always produce the corresponding
ordinate from the y vector), we can simply make the new vector a
superset of x. It will contain the same coordinates as x, but also
the abscissas of the new points we want interpolated. A simple way
is to use the vector's **populate** operation.

x populate sx 10

Finally, we generate the ordinates (the images of the spline)
using the **spline** command. The ordinates are stored in a
fourth vector.

spline natural x y sx sy

graph .graph

.graph element create original -x x -y x -color blue

.graph element create spline -x sx -y sy -color red

table . .graph

Alternatively, you can generate a spline using the
**quadratic** operation. Quadratic interpolation produces a
spline which follows the line segments of the data points much more
closely.

spline quadratic x y sx sy

**spline natural***x y sx sy*- Computes a cubic spline from the data points represented by the
vectors
*x*and*y*and interpolates new points using vector*sx*as the x-coordinates. The resulting y-coordinates are written to a new vector*sy*. The vectors*x*and*y*must be the same length and contain at least three components. The order of the components of*x*must be monotonically increasing.*Sx*is the vector containing the x-coordinates of the points to be interpolated. No component of*sx*can be less than first component of*x*or greater than the last component. The order of the components of*sx*must be monotonically increasing.*Sy*is the name of the vector where the calculated y-coordinates will be stored. If*sy*does not already exist, a new vector will be created.

**spline quadratic***x y sx sy*- Computes a quadratic spline from the data points represented by
the vectors
*x*and*y*and interpolates new points using vector*sx*as the x-coordinates. The resulting y-coordinates are written to a new vector*sy*. The vectors*x*and*y*must be the same length and contain at least three components. The order of the components of*x*must be monotonically increasing.*Sx*is the vector containing the x-coordinates of the points to be interpolated. No component of*sx*can be less than first component of*x*or greater than the last component. The order of the components of*sx*must be monotonically increasing.*Sy*is the name of the vector where the calculated y-coordinates are stored. If*sy*does not already exist, a new vector will be created.

Numerical Analysis

by R. Burden, J. Faires and A. Reynolds.

Prindle, Weber & Schmidt, 1981, pp. 112

Shape Preserving Quadratic Splines

by D.F.Mcallister & J.A.Roulier

Coded by S.L.Dodd & M.Roulier N.C.State University.

The original code for the quadratric spline can be found in TOMS #574.

2.4 | BLT |