Next: Initializing the B-splines solver, Up: Basis Splines [Index]

B-splines are commonly used as basis functions to fit smoothing
curves to large data sets. To do this, the abscissa axis is
broken up into some number of intervals, where the endpoints
of each interval are called *breakpoints*. These breakpoints
are then converted to *knots* by imposing various continuity
and smoothness conditions at each interface. Given a nondecreasing
knot vector
*t = {t_0, t_1, …, t_{n+k-1}}*,
the *n* basis splines of order *k* are defined by

B_(i,1)(x) = (1, t_i <= x < t_(i+1) (0, else B_(i,k)(x) = [(x - t_i)/(t_(i+k-1) - t_i)] B_(i,k-1)(x) + [(t_(i+k) - x)/(t_(i+k) - t_(i+1))] B_(i+1,k-1)(x)

for *i = 0, …, n-1*. The common case of cubic B-splines
is given by *k = 4*. The above recurrence relation can be
evaluated in a numerically stable way by the de Boor algorithm.

If we define appropriate knots on an interval *[a,b]* then
the B-spline basis functions form a complete set on that interval.
Therefore we can expand a smoothing function as

f(x) = \sum_i c_i B_(i,k)(x)

given enough *(x_j, f(x_j))* data pairs. The coefficients
*c_i* can be readily obtained from a least-squares fit.