Algoritmo di de Casteljau

Niente fonti!
Questa voce o sezione sull'argomento matematica non cita le fonti necessarie o quelle presenti sono insufficienti.

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.

Definizione

Dato un polinomio B in forma di Bernstein di grado n

B ( t ) = i = 0 n β i b i , n ( t ) , {\displaystyle B(t)=\sum _{i=0}^{n}\beta _{i}b_{i,n}(t),}

dove b è un polinomio base di Bernstein, il polinomio al punto t0 può essere valutato con la relazione di ricorrenza

β i ( 0 ) := β i  ,  i = 0 , , n , {\displaystyle \beta _{i}^{(0)}:=\beta _{i}{\mbox{ , }}i=0,\ldots ,n,}
β i ( j ) := β i ( j 1 ) ( 1 t 0 ) + β i + 1 ( j 1 ) t 0  ,  i = 0 , , n j  ,  j = 1 , n , {\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,}

con

B ( t 0 ) = β 0 ( n ) . {\displaystyle B(t_{0})=\beta _{0}^{(n)}.}

Annotazioni

Nel calcolo manuale è utile scrivere i coefficienti in uno schema triangolare del tipo:

β 0 = β 0 ( 0 ) β 0 ( 1 ) β 1 = β 1 ( 0 ) β 0 ( n ) β n 1 = β n 1 ( 0 ) β n 1 ( 1 ) β n = β n ( 0 ) {\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}}}

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.

B ( t ) = i = 0 n β i ( 0 ) b i , n ( t )  ,  [ 0 , 1 ] , {\displaystyle B(t)=\sum _{i=0}^{n}\beta _{i}^{(0)}b_{i,n}(t)\qquad {\mbox{ , }}\in [0,1],}

fino a

B 1 ( t ) = i = 0 n β 0 ( i ) b i , n ( t t 0 )  ,  [ 0 , t 0 ] {\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}]}

e

B 2 ( t ) = i = 0 n β n i ( i ) b i , n ( t t 0 1 t 0 )  ,  [ t 0 , 1 ] . {\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].}

Esempio

Si vuole calcolare il valore del polinomio di Bernstein di grado 2 con i coefficienti:

β 0 ( 0 ) = β 0 {\displaystyle \beta _{0}^{(0)}=\beta _{0}}
β 1 ( 0 ) = β 1 {\displaystyle \beta _{1}^{(0)}=\beta _{1}}
β 2 ( 0 ) = β 2 {\displaystyle \beta _{2}^{(0)}=\beta _{2}}

nel punto t0.

Si avvia la ricorsione con:

β 0 ( 1 ) = β 0 ( 0 ) ( 1 t 0 ) + β 1 ( 0 ) t 0 = β 0 ( 1 t 0 ) + β 1 t 0 {\displaystyle \beta _{0}^{(1)}=\beta _{0}^{(0)}(1-t_{0})+\beta _{1}^{(0)}t_{0}=\beta _{0}(1-t_{0})+\beta _{1}t_{0}}
β 1 ( 1 ) = β 1 ( 0 ) ( 1 t 0 ) + β 2 ( 0 ) t 0 = β 1 ( 1 t 0 ) + β 2 t 0 {\displaystyle \beta _{1}^{(1)}=\beta _{1}^{(0)}(1-t_{0})+\beta _{2}^{(0)}t_{0}=\beta _{1}(1-t_{0})+\beta _{2}t_{0}}

e alla seconda iterazione la ricorsione termina con:

β 0 ( 2 ) = β 0 ( 1 ) ( 1 t 0 ) + β 1 ( 1 ) t 0   = β 0 ( 1 t 0 ) ( 1 t 0 ) + β 1 t 0 ( 1 t 0 ) + β 1 ( 1 t 0 ) t 0 + β 2 t 0 t 0   = β 0 ( 1 t 0 ) 2 + β 1 2 t 0 ( 1 t 0 ) + β 2 t 0 2 {\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}}}

che è il polinomio di Bernstein desiderato di grado 2.

Altri progetti

Altri progetti

  • Wikimedia Commons
  • Collabora a Wikimedia Commons Wikimedia Commons contiene immagini o altri file su Algoritmo di de Casteljau
  Portale Matematica: accedi alle voci di Wikipedia che trattano di matematica