En el subcampo matemático del análisis numérico, el algoritmo de De Boor[1] es un algoritmo de tiempo polinomial y numéricamente estable para evaluar curvas spline en forma B-spline.
Es una generalización del algoritmo Casteljau para las curvas de Bézier.
El algoritmo fue ideado por Carl R. De Boor.
Se han creado variantes simplificadas y potencialmente más rápidas del algoritmo de De Boor, pero sufren una estabilidad comparativamente menor.
multiplicada con valores vectoriales potencialmente constantes
son funciones polinómicas unitarias de grado
(se utilizan índices basados en cero en adelante).
Las B-splines tienen soporte local, lo que significa que los polinomios son positivos solamente en un ámbito finito y cero en otros lugares.
La fórmula de recursión Cox-De Boor[4] muestra esto:: Permitiendo que el índice
defina el intervalo de nudos que contiene la posición,
Podemos ver en la fórmula de recursión que solo B-splines con
no son ceros para este intervalo de nudos.
Así, la suma se reduce a: De
Esto significa que cualquier intervalo de nudos
que se use realmente debe tener al menos
En un programa de computadora, esto generalmente se logra repitiendo la primera y la última ubicación de nudo utilizada
y ubicaciones de nudos reales
, uno podría rellenar el vector de nudos como
El algoritmo no calcula las funciones de las B-splines
la siguiente recursión es aplicada: Una vez las iteraciones están completas, tenemos
{\displaystyle \mathbf {S} (x)=\mathbf {d} _{k,p}}
con la fórmula de recursión Cox-De Boor, porque no calcula términos que están garantizados para ser multiplicados por cero.
El algoritmo anterior no está optimizado para la implementación en un ordenador.
Cada punto de control provisional es escrito exactamente una vez y leídos dos veces.
puntos de control provisionales, permitiendo a
utilizado en cada paso, de manera que podemos reutilizar la memoria también.
Además, es más conveniente utilizar un índice basado en cero
Por ello obtenemos el algoritmo mejorado: Sea
Después que las iteraciones se completan, el resultado es
El código siguiente en el lenguaje de programación de Python es una implementación inocente ("naive") del algoritmo optimizado.