HOME

TheInfoList



OR:

In the
mathematical Mathematics is an area of knowledge that includes the topics of numbers, formulas and related structures, shapes and the spaces in which they are contained, and quantities and their changes. These topics are represented in modern mathematics ...
subfield of
numerical analysis Numerical analysis is the study of algorithms that use numerical approximation (as opposed to symbolic manipulations) for the problems of mathematical analysis (as distinguished from discrete mathematics). It is the study of numerical methods ...
de Boor's algorithmC. de Boor
971 Year 971 ( CMLXXI) was a common year starting on Sunday (link will display the full calendar) of the Julian calendar. Events By place Byzantine Empire * Battle of Dorostolon: A Byzantine expeditionary army (possibly 30–40,000 men) ...
"Subroutine package for calculating with B-splines", Techn.Rep. LA-4728-MS, Los Alamos Sci.Lab, Los Alamos NM; p. 109, 121.
is a polynomial-time and
numerically stable In the mathematical subfield of numerical analysis, numerical stability is a generally desirable property of numerical algorithms. The precise definition of stability depends on the context. One is numerical linear algebra and the other is algorit ...
algorithm In mathematics and computer science, an algorithm () is a finite sequence of rigorous instructions, typically used to solve a class of specific problems or to perform a computation. Algorithms are used as specifications for performing ...
for evaluating
spline curve In mathematics, a spline is a special function defined piecewise by polynomials. In interpolating problems, spline interpolation is often preferred to polynomial interpolation because it yields similar results, even when using low degree poly ...
s in B-spline form. It is a generalization of
de Casteljau's algorithm In the mathematical field of numerical analysis, De Casteljau's algorithm is a recursive method to evaluate polynomials in Bernstein form or Bézier curves, named after its inventor Paul de Casteljau. De Casteljau's algorithm can also be used to ...
for Bézier curves. The algorithm was devised by Carl R. de Boor. Simplified, potentially faster variants of the de Boor algorithm have been created but they suffer from comparatively lower stability.


Introduction

A general introduction to B-splines is given in the main article. Here we discuss de Boor's algorithm, an efficient and numerically stable scheme to evaluate a spline curve \mathbf(x) at position x . The curve is built from a sum of B-spline functions B_(x) multiplied with potentially vector-valued constants \mathbf_i , called control points, : \mathbf(x) = \sum_i \mathbf_i B_(x). B-splines of order p + 1 are connected piece-wise polynomial functions of degree p defined over a grid of knots (we always use zero-based indices in the following). De Boor's algorithm uses O(p2) + O(p) operations to evaluate the spline curve. Note: the main article about B-splines and the classic publications use a different notation: the B-spline is indexed as B_(x) with n = p + 1.


Local support

B-splines have local support, meaning that the polynomials are positive only in a finite domain and zero elsewhere. The Cox-de Boor recursion formulaC. de Boor, p. 90 shows this: :B_(x) := \begin 1 & \text \quad t_i \leq x < t_ \\ 0 & \text \end :B_(x) := \frac B_(x) + \frac B_(x). Let the index k define the knot interval that contains the position, x \in
Python programming language Python is a high-level, general-purpose programming language. Its design philosophy emphasizes code readability with the use of significant indentation. Python is dynamically-typed and garbage-collected. It supports multiple programming p ...
is a naive implementation of the optimized algorithm. def deBoor(k: int, x: int, t, c, p: int): """Evaluates S(x). Arguments --------- k: Index of knot interval that contains x. x: Position. t: Array of knot positions, needs to be padded as described above. c: Array of control points. p: Degree of B-spline. """ d = [c[j + k - p] for j in range(0, p + 1)] for r in range(1, p + 1): for j in range(p, r - 1, -1): alpha = (x - t[j + k - p]) / (t[j + 1 + k - r] - t[j + k - p]) d[j] = (1.0 - alpha) * d - 1+ alpha * d return d


See also

*
De Casteljau's algorithm In the mathematical field of numerical analysis, De Casteljau's algorithm is a recursive method to evaluate polynomials in Bernstein form or Bézier curves, named after its inventor Paul de Casteljau. De Casteljau's algorithm can also be used to ...
* Bézier curve *
NURBS Non-uniform rational basis spline (NURBS) is a mathematical model using B-spline, basis splines (B-splines) that is commonly used in computer graphics for representing curves and Surface (mathematics), surfaces. It offers great flexibility and pr ...


External links


De Boor's Algorithm


Computer code


PPPACK
contains many spline algorithms in Fortran
GNU Scientific Library
C-library, contains a sub-library for splines ported from PPPACK
SciPy
Python-library, contains a sub-library ''scipy.interpolate'' with spline functions based on FITPACK
TinySpline
C-library for splines with a C++ wrapper and bindings for C#, Java, Lua, PHP, Python, and Ruby
Einspline
C-library for splines in 1, 2, and 3 dimensions with Fortran wrappers


References

Works cited *{{cite book , author = Carl de Boor , title = A Practical Guide to Splines, Revised Edition , publisher = Springer-Verlag , year = 2003, isbn=0-387-95366-3 Numerical analysis Splines (mathematics) Interpolation