Algoritmo de De Boor

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.