spline(BLT 2.4) spline(BLT 2.4)
______________________________________________________________________________
spline  Fit curves with spline interpolation
spline natural x y sx sy
spline quadratic x y sx sy
______________________________________________________________________________
The spline command computes a spline fitting a set of data points (x
and y vectors) and produces a vector of the interpolated images (ycoordinates)
at a given set of xcoordinates.
Curve fitting has many applications. In graphs, curve fitting can be
useful for displaying curves which are aesthetically pleasing to the
eye. Another advantage is that you can quickly generate arbitrary
points on the curve from a small set of data points.
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 (xcoordinates) or the new points. The ordinates (ycoordinates)
are interpolated using the spline and written to another vector.
Before we can use the spline command, we need to create two BLT vectors
which will represent the knots (x and y coordinates) of the data that
we're going to fit. Obviously, both vectors must be the same length.
# Create sample data of ten points.
vector x(10) y(10)
for {set i 10} {$i > 0} {incr i 1} {
set x($i1) [expr $i*$i]
set y($i1) [expr sin($i*$i*$i)]
}
We now have two vectors x and y representing the ten data points we're
trying to fit. The order of the values of x must be monotonically
increasing. We can use the vector's sort operation to sort the vectors.
x sort y
The components of x are sorted in increasing order. The components of
y are rearranged so that the original x,y coordinate pairings are
retained.
A third vector is needed to indicate the abscissas (xcoordinates) 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 popu
late operation.
x populate sx 10
This creates a new vector sx. It contains the abscissas of x, but in
addition sx will have ten evenly distributed values between each
abscissa. You can interpolate any points you wish, simply by setting
the vector values.
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
This creates a new vector sy. It will have the same length as sx. The
vectors sx and sy represent the smoothed curve which we can now plot.
graph .graph
.graph element create original x x y x color blue
.graph element create spline x sx y sy color red
table . .graph
The natural operation employs a cubic interpolant when forming the
spline. In terms of the draftmen's spline, a natural spline requires
the least amount of energy to bend the spline (strip of wood), while
still passing through each knot. In mathematical terms, the second derivatives
of the first and last points are zero.
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 xcoordinates. The resulting ycoordinates 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 xcoordinates 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 ycoordinates 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 xcoordinates. The resulting ycoordinates 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 xcoordinates 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 ycoordinates 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.
spline, vector, graph
spline(BLT 2.4)
[ Back ]
