title: Algorithme de Neville
text: # Algorithme de Neville
  
  En analyse numérique, l'algorithme de Neville est un algorithme d'interpolation polynomiale dû à Eric Harold Neville (en).
  
  L'algorithme de Neville est une méthode récursive du calcul de la valeur du polynôme d'interpolation en un point donné, avec lequel il est aisé d'ajouter des points d'interpolation au fur et à mesure. Il est moins adapté pour fournir une expression du polynôme d'interpolation. Il est parfois confondu avec l'algorithme d'Aitken.
  
  ## Description de l'algorithme
  
  Soit un jeu de n+1 points donnés $(x_i,$ $y_i)$ où les $x_i$ sont distincts deux à deux, et le polynôme d'interpolation p(x) de degré au plus n vérifiant:
  
      $p(x_{i})=y_{i},\,i=0,\ldots ,n.$
  
  L'algorithme de Neville évalue ce polynôme pour le point d'abscisse x.
  
  Soit $p_{i,j}(x)$ le polynôme de degré j qui passe par les points $(x_k,$ $y_k)$ pour k = i, i + 1, …, i+j.
  
  Les $p_{i,j}(x)$ satisfont à la relation de récurrence
  
      $p_{i,0}(x)=y_{i},\,$$0\leq i\leq n,\,$ $p_{i,j+1}(x)={\frac {(x_{i}-x)p_{i-1,j}(x)+(x-x_{i-j-1})p_{i,j}(x)}{x_{i}-x_{i-j-1}}},\,$$0\leq j<n{\text{ et }}0\leq i<n-j.\,$
  
  Cette relation de récurrence permet de calculer $p_{0,n}(x),$ qui est la valeur cherchée. Il nécessite $O(n^2)$ opérations en virgule flottante.
  
  Par exemple, pour n = 4, on peut utiliser la relation de récurrence pour remplir le tableau triangulaire ci-dessous, de gauche à droite.
  
      $p_{0,0}(x)=y_{0}\,$ $p_{0,1}(x)\,$ $p_{1,0}(x)=y_{1}\,$$p_{0,2}(x)\,$ $p_{1,1}(x)\,$$p_{0,3}(x)\,$ $p_{2,0}(x)=y_{2}\,$$p_{1,2}(x)\,$$p_{0,4}(x)\,$ $p_{2,1}(x)\,$$p_{1,3}(x)\,$ $p_{3,0}(x)=y_{3}\,$$p_{2,2}(x)\,$ $p_{3,1}(x)\,$ $p_{4,0}(x)=y_{4}\,$
  
  On obtient ainsi $p_{0,4}(x),$ la valeur à l'abscisse x du polynôme d'interpolation passant par les 5 points donnés.
  
  ## Démonstration
  
  Soit $p_{i,j}(x)$ le polynôme de degré j qui passe par les points $(x_k,$ $y_k)$ pour k = i, i + 1, …, i+j, et soit $f_{i,j}$ le coefficient du terme de degré j de ce polynôme, c'est-à-dire:
  
      $p_{i,j}(x)=f_{i,j}x^{j}+...~$
  
  $p_{i,j}(x)$ passe par les points numérotés i, i + 1, …, i+j
  
  $p_{i+1,j}(x)$ passe par les points numérotés i + 1, …, i+j,i+j+ 1
  
  $p_{i,j+1}(x)$ passe par les points numérotés i, i + 1, …, i+j,i+j+ 1
  
  Les polynômes $p_{i,j+1}(x)$ et $p_{i,j}(x)$ ont les points i, i + 1, …, i+j en commun. Il suit que la soustraction $p_{i,j+1}(x)$ - $p_{i,j}(x)$ de ces deux polynômes s'annulera pour les j+1 abscisses de ces points. Autrement dit les abscisses $x_{i}$, ... , $x_{i+j}$ sont racines du polynôme $p_{i,j+1}(x)$ - $p_{i,j}(x).$ Comme $p_{i,j+1}(x)$ - $p_{i,j}(x)$ est un polynôme de degré j+1, il possède au plus j+1 racines. Donc finalement nous connaissons toutes ses racines, ce sont les abscisses: $x_{i}$, ... , $x_{i+j}$. Nous pouvons dès lors écrire ce polynôme sous forme factorisée:
  
      $p_{i,j+1}(x)-p_{i,j}(x)=f_{i,j+1}(x-x_{i})(x-x_{i+1})...(x-x_{i+j})~$
  
  En employant la même méthode, on trouve aussi :
  
      $p_{i,j+1}(x)-p_{i+1,j}(x)=f_{i,j+1}(x-x_{i+1})(x-x_{i+2})...(x-x_{i+j+1})~$
  
  En divisant ces deux relations membre à membre, on obtient :
  
      ${\frac {p_{i,j+1}(x)-p_{i,j}(x)}{p_{i,j+1}(x)-p_{i+1,j}(x)}}={\frac {x-x_{i}}{x-x_{i+j+1}}}$
  
  dont on peut isoler $p_{i,j+1}$ pour retrouver la relation de récurrence de Neville :
  
      $p_{i,j+1}(x)={\frac {(x_{i}-x)p_{i+1,j}(x)+(x-x_{i+j+1})p_{i,j}(x)}{x_{i}-x_{i+j+1}}}~$
  
  Par ailleurs, en employant la même méthode que précédemment, on peut obtenir:
  
      $p_{i+1,j}(x)-p_{i,j}(x)=(f_{i+1,j}-f_{i,j})(x-x_{i+1})(x-x_{i+2})...(x-x_{i+j})~$
  
  et en utilisant l'égalité évidente :
  
      $p_{i,j+1}(x)-p_{i,j}(x)=p_{i,j+1}(x)-p_{i+1,j}(x)+p_{i+1,j}(x)-p_{i,j}(x)~$
  
  on obtient :
  
      $f_{i,j+1}(x-x_{i})=f_{i,j+1}(x-x_{i+j+1})+(f_{i+1,j}-f_{i,j})~$
  
  qui fournit un algorithme récursif de calcul de ces coefficients :
  
      $f_{i,0}=y_{i},\,$$0\leq i\leq n,\,$ $f_{i,j+1}={\frac {f_{i+1,j}-f_{i,j}}{x_{i+j+1}-x_{i}}}$$0\leq j<n{\text{ et }}0\leq i<n-j.\$
  
  Ces coefficients sont appelés différences divisées, notées :
  
      $f_{i,j}=f[x_{i},\ldots ,x_{i+j}],$
  
  et sont utilisés pour calculer le polynôme d'interpolation de Newton.
  
  ## Exemple
  
  L'algorithme de Neville est plus économique numériquement que l'interpolation newtonienne lorsque le nombre de points à évaluer est faible (typiquement, inférieur aux nombre de points d'interpolation). Au delà, il vaut mieux calculer une fois pour toutes les différences divisées, et utiliser la méthode de Newton.
  
  L'algorithme de Neville est utilisé notamment dans la méthode de Romberg, une méthode d'intégration numérique.
  
  