spline natural x y sx sy
spline quadratic x y sx sy
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 polynomial 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)]
}
We now have two vectors CWx and CWy representing the ten data points we’re
trying to fit. The order of the values of CWx must be monotonically increasing.
We can use the vector’s sort operation to sort the vectors. x sort y
The components of CWx are sorted in increasing order. The components of
CWy are rearranged so that the original x,y coordinate pairings are retained.
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 CWx. It will contain the same coordinates as CWx, 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
This creates a new vector CWsx. It contains the abscissas of CWx, but in
addition CWsx 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 CWsy. It will have the same length as CWsx. The
vectors CWsx and CWsy represent the smoothed curve which we can now plot.
graph .graph
The natural operation employs a cubic interpolant when forming the spline.
In terms of the draftsmen’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.
.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
Operations
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 quadratic spline can be found in TOMS #574.