In matematica e in particolare in analisi numerica, l'algoritmo di de Casteljau, che prende il nome dal suo autore Paul de Casteljau, è un metodo ricorsivo per valutare polinomi nella forma di Bernstein o curve di Bézier.
Sebbene l'algoritmo sia più lento per la maggior parte delle architetture se comparato all'approccio diretto, è numericamente più stabile.
Dato un polinomio B in forma di Bernstein di grado n
![{\displaystyle B(t)=\sum _{i=0}^{n}\beta _{i}b_{i,n}(t),}](https://wikimedia.org/api/rest_v1/media/math/render/svg/9e9c9f3b4da49c8ae92afd685a45f0f92ff7635a)
dove b è un polinomio base di Bernstein, il polinomio al punto t0 può essere valutato con la relazione di ricorrenza
![{\displaystyle \beta _{i}^{(0)}:=\beta _{i}{\mbox{ , }}i=0,\ldots ,n,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/98bd20929cfa72770ea93f075811a87b32b7d0d2)
![{\displaystyle \beta _{i}^{(j)}:=\beta _{i}^{(j-1)}(1-t_{0})+\beta _{i+1}^{(j-1)}t_{0}{\mbox{ , }}i=0,\ldots ,n-j{\mbox{ , }}j=1,\ldots n,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/52792d6b5e0ec7c9b4a6b40f43d4ffe10adc3056)
con
![{\displaystyle B(t_{0})=\beta _{0}^{(n)}.}](https://wikimedia.org/api/rest_v1/media/math/render/svg/1e58a9b6e472c671520531b405d5aedb10e51797)
Nel calcolo manuale è utile scrivere i coefficienti in uno schema triangolare del tipo:
![{\displaystyle {\begin{matrix}\beta _{0}&=\beta _{0}^{(0)}&&&\\&&\beta _{0}^{(1)}&&\\\beta _{1}&=\beta _{1}^{(0)}&&&\\&&&\ddots &\\\vdots &&\vdots &&\beta _{0}^{(n)}\\&&&&\\\beta _{n-1}&=\beta _{n-1}^{(0)}&&&\\&&\beta _{n-1}^{(1)}&&\\\beta _{n}&=\beta _{n}^{(0)}&&&\\\end{matrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/58fd085f9048ffc54657fc80dfae9bab07d4f783)
Nella scelta di un punto t0 per cui calcolare il polinomio di Bernstein, si possono usare le diagonali dello schema triangolare per costruire una divisione del polinomio.
![{\displaystyle B(t)=\sum _{i=0}^{n}\beta _{i}^{(0)}b_{i,n}(t)\qquad {\mbox{ , }}\in [0,1],}](https://wikimedia.org/api/rest_v1/media/math/render/svg/31d0ba5cd1e22ab53d9a22594b7a722e9e931c9e)
fino a
![{\displaystyle B_{1}(t)=\sum _{i=0}^{n}\beta _{0}^{(i)}b_{i,n}\left({\frac {t}{t_{0}}}\right)\qquad {\mbox{ , }}\in [0,t_{0}]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/9e5b29a84f7ddedd9a759e438af4a7ae190cc2a1)
e
![{\displaystyle B_{2}(t)=\sum _{i=0}^{n}\beta _{n-i}^{(i)}b_{i,n}\left({\frac {t-t_{0}}{1-t_{0}}}\right)\qquad {\mbox{ , }}\in [t_{0},1].}](https://wikimedia.org/api/rest_v1/media/math/render/svg/d70b319c386ca4fc3ec89018b2fcb419f5d35004)
Si vuole calcolare il valore del polinomio di Bernstein di grado 2 con i coefficienti:
![{\displaystyle \beta _{0}^{(0)}=\beta _{0}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/b906ff14964ea77ba3a8d1e1484c835a53c54c65)
![{\displaystyle \beta _{1}^{(0)}=\beta _{1}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/0c0afa61238e8ecc64244d7f5f80046ae9fb6e52)
![{\displaystyle \beta _{2}^{(0)}=\beta _{2}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/ef05314d830a915317409fbbf9e79c43bb2fa87c)
nel punto t0.
Si avvia la ricorsione con:
![{\displaystyle \beta _{0}^{(1)}=\beta _{0}^{(0)}(1-t_{0})+\beta _{1}^{(0)}t_{0}=\beta _{0}(1-t_{0})+\beta _{1}t_{0}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/58321257575553e731e053089665ed5a08fde400)
![{\displaystyle \beta _{1}^{(1)}=\beta _{1}^{(0)}(1-t_{0})+\beta _{2}^{(0)}t_{0}=\beta _{1}(1-t_{0})+\beta _{2}t_{0}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/971e06dcb525874d3d4f4f171d2e264d35ca074d)
e alla seconda iterazione la ricorsione termina con:
![{\displaystyle {\begin{matrix}\beta _{0}^{(2)}&=&\beta _{0}^{(1)}(1-t_{0})+\beta _{1}^{(1)}t_{0}\\\ &=&\beta _{0}(1-t_{0})(1-t_{0})+\beta _{1}t_{0}(1-t_{0})+\beta _{1}(1-t_{0})t_{0}+\beta _{2}t_{0}t_{0}\\\ &=&\beta _{0}(1-t_{0})^{2}+\beta _{1}2t_{0}(1-t_{0})+\beta _{2}t_{0}^{2}\\\end{matrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/acdcf38945248db9a92d0096582ba53ed2605dca)
che è il polinomio di Bernstein desiderato di grado 2.