Algorithme de Thomas

En algèbre linéaire appliquée à la résolution numérique d'équation, l'algorithme de Thomas (du nom de Llewellyn Thomas), est une forme simplifiée du pivot de Gauss qui peut être utilisée pour résoudre des systèmes d'équations tridiagonales. Un système tridiagonal pour n inconnues peut s'écrire

et .

Pour de tels systèmes, la solution a une complexité algorithmique de au lieu de requis par élimination gaussienne. Un premier balayage élimine les coefficients , puis une retro substitution (abrégée) produit la solution. Des exemples de telles matrices proviennent généralement de la discrétisation de l'équation de Poisson 1D et de l'interpolation par splines cubiques.

L'algorithme de Thomas n'est pas stable en général, mais il l'est dans plusieurs cas particuliers, notamment lorsque la matrice est diagonalement dominante (soit par lignes, soit par colonnes) ou symétrique définie positive[1],[2]. Pour une caractérisation plus précise de la stabilité de l'algorithme de Thomas, voir le théorème de Higham 9.12[3]. Si la stabilité est nécessaire dans le cas général, l'élimination gaussienne avec pivotement partiel (GEPP) est alors recommandée[2].

Méthode

modifier

Le balayage vers l'avant consiste en le calcul de nouveaux coefficients comme suit, où les nouveaux coefficients sont notés par des dérivées :

 

et

 

La solution est alors obtenue par substitution à rebours :

 
 

La méthode ci-dessus ne modifie pas les vecteurs de coefficients d'origine, mais doit stocker les nouveaux coefficients. Si les vecteurs de coefficients doivent être modifiés, alors un algorithme avec moins de gestion de l'information est possible :

Pour   on détermine

 
 
 

suivi du remplacement à rebours

 
 

L'algorithme matriciel tridiagonal est un cas particulier d'élimination gaussienne.

On suppose que les inconnues soient  , et que les équations à résoudre sont :

 

En modifiant la deuxième équation (   ) avec la première équation comme suit :

 

ce qui donnerait :

 

On peut remarquer que   a été éliminé de la deuxième équation. Utiliser une tactique similaire avec la deuxième équation modifiée sur la troisième équation donne :

 

Cette fois   a été éliminé. Si cette procédure est répétée pour l'ensemble des   lignes, alors chaque équation modifiée n'impliquerait qu'une seule inconnue,  . Cette équation peut être résolue puis utilisée pour résoudre l'équation  , et ainsi de suite jusqu’à ce que toutes les inconnues soient obtenues.

On observe que les coefficients des équations modifiées deviennent de plus en plus compliqués s’ils sont exprimés de façon explicite. En examinant la procédure, les coefficients modifiés (notés par des tildes) peuvent plutôt être définis de manière récursive :

 
 
 
 
 
 
 

Pour accélérer encore la résolution, les coefficients   peuvent être divisés (s'il n'y a pas de risque de division par zéro), les coefficients modifiés les plus récents, ici notés par une dérivée, seront :

 
 
 
 
 
 

Cela donne le système suivant :

 

La dernière équation ne comportant qu’une seule inconnue, en la résolvant on réduit l'avant-dernière équation à une inconnue, de sorte que cette substitution à rebours puisse être utilisée pour trouver toutes les inconnues :

 
 

Références

modifier
  1. Pradip Niyogi, Introduction to Computational Fluid Dynamics, Pearson Education India, (ISBN 978-81-7758-764-7), p. 76
  2. a et b Biswa Nath Datta, Numerical Linear Algebra and Applications, Second Edition, SIAM, (ISBN 978-0-89871-765-5), p. 162
  3. Nicholas J. Higham, Accuracy and Stability of Numerical Algorithms: Second Edition, SIAM, (ISBN 978-0-89871-802-7), p. 175
  • W. H. Press, S. A. Teukolsky, W. T. Vetterling et B. P. Flannery, Numerical Recipes: The Art of Scientific Computing, New York, Cambridge University Press, (ISBN 978-0-521-88068-8), « Section 2.4 »