Aller au contenu

Algorithme QR

Un article de Wikipédia, l'encyclopédie libre.

En algèbre linéaire numérique, l' algorithme QR ou itération QR est un algorithme de recherche de valeurs propres, une procédure permettant de calculer les valeurs et vecteurs propres d'une matrice . L'algorithme QR a été développé à la fin des années 1950 par John G.F. Francis et par Vera N. Kublanovskaïa, travaillant indépendamment[1]. L'idée de base est d'effectuer une décomposition QR, en écrivant la matrice comme un produit d'une matrice orthogonale et d'une matrice triangulaire supérieure, en multipliant les facteurs dans l'ordre inverse et en itérant.

Algorithme QR en pratique

[modifier | modifier le code]

Formellement, soit A une matrice réelle dont on veut calculer les valeurs propres, et soit A0 := A . À la k -ième étape (en commençant par k = 0 ), on calcule la décomposition QR Ak = QkRkQk est une matrice orthogonale (c'est-à-dire QT = Q−1 ) et Rk est une matrice triangulaire supérieure. On forme alors Ak+1 = RkQk . On peut alors noter que ainsi tous les Ak sont semblables et ont donc les mêmes valeurs propres. L'algorithme est numériquement stable car il procède par transformations de similarité orthogonales .

Sous certaines conditions[2], les matrices A k convergent vers une matrice triangulaire, la forme de Schur de A . Les valeurs propres d'une matrice triangulaire sont ses éléments diagonaux et le problème des valeurs propres est résolu. Lors des tests de convergence, il n’est pas pratique d’exiger des zéros exacts,[réf. nécessaire] mais le théorème de Gershgorin fournit une limite à l'erreur.

En utilisant la forme de Hessenberg

[modifier | modifier le code]

Dans la forme brute ci-dessus, les itérations sont relativement coûteuses. Cela peut être atténué en prenant d'abord la forme de Hessenberg supérieure de la matrice A (ce qui coûte opérations arithmétiques utilisant une technique basée sur la réduction de Householder ), avec une suite finie de transformations de similarité orthogonales, un peu comme une décomposition QR bilatérale[3],[4]. (Pour la décomposition QR, les réflecteurs de Householder sont multipliés uniquement à gauche, mais pour le cas de Hessenberg, ils sont multipliés à la fois à gauche et à droite.) Déterminer la décomposition QR d'une matrice de Hessenberg supérieure coûte opérations arithmétiques. De plus, comme la forme de Hessenberg est déjà presque triangulaire supérieure (elle n'a qu'une seule entrée non nulle sous chaque diagonale), son utilisation comme point de départ réduit le nombre d'étapes nécessaires à la convergence de l'algorithme QR.

Si la matrice d'origine est symétrique, alors la matrice de Hessenberg supérieure est également symétrique et donc tridiagonale, et il en va de même pour toutes les Ak . Dans ce cas, atteindre la forme Hessenberg coûte opérations arithmétiques utilisant une technique basée sur la réduction de Householder[3],[4]. Déterminer la décomposition QR d'une matrice tridiagonale symétrique coûte opérations[5].

Phase d'itération

[modifier | modifier le code]

Si une matrice de Hessenberg a un élément pour certains , c'est-à-dire que si l'un des éléments de la sous-diagonale est nul, alors il se décompose en blocs dont les problèmes propres peuvent être résolus séparément ; une valeur propre est soit une valeur propre de la sous-matrice des premières lignes et colonnes, ou une valeur propre de la sous-matrice des lignes et colonnes restantes. Le but de l'étape d'itération QR est de réduire l'un de ces éléments de sorte qu'un petit bloc le long de la diagonale soit effectivement séparé de bloc principal de la matrice. Dans le cas d'une valeur propre réelle qui est généralement un bloc dans le coin inférieur droit (auquel cas l'élément contient cette valeur propre), alors que dans le cas d'une paire de valeurs propres complexes conjuguées, c'est un bloc dans le coin inférieur droit.

Le taux de convergence dépend de la séparation entre les valeurs propres, donc un algorithme pratique utilisera des décalages, explicites ou implicites, pour augmenter la séparation et accélérer la convergence. Un algorithme QR symétrique typique isole chaque valeur propre (puis réduit la taille de la matrice) avec seulement une ou deux itérations, ce qui le rend efficace et robuste.[pas clair][ clarification nécessaire ]

Une seule itération avec décalage explicite

[modifier | modifier le code]

Les étapes d'une itération QR avec décalage explicite sur une matrice de Hessenberg réelle sont:

  1. Choisir un décalage et le soustraire de tous les éléments diagonaux, produisant la matricex . Une stratégie classique est de prendre , mais ce choix n'est pas optimal pour accélérer la convergence. Le mieux est de choisir proche d'une valeur propre, afin d'accélérer la convergence vers cette valeur propre.
  2. Calculer la suite des rotations de Givens sur , où agit sur les lignes et , et est choisi pour annuler le coefficient en de . Cela produit une matrice triangulaire supérieure . Le facteur orthogonal sera alors , mais il n'est ni nécessaire ni efficace de calculer cette matrice explicitement.
  3. On multiplie par les matrices de Givens , , …, à droite, où agit sur les colonnes et . On obtient la matrice , qui est également une matrice de Hessenberg.
  4. On annule le décalage en ajoutant à toutes les valeurs diagonales. Le résultat est alors . Puisque commute avec , on retrouve .

Le but du décalage est de modifier les rotations Givens choisies.

Plus en détail, la structure de l'une des matrices est où le dans le coin supérieur gauche se trouve un bloc identité et les deux scalaires et sont déterminés par l'angle de rotation approprié pour annuler le coefficient . Il n'est pas nécessaire d'expliciter  ; les facteurs et peuvent être déterminés directement à partir des éléments sur lesquels la matrice devrait agir. Il n'est pas non plus nécessaire de produire la matrice entière ; multiplier (à gauche) par n'affecte que les lignes et , il est donc plus simple de simplement mettre à jour ces deux lignes directement. De même, pour la multiplication par à droite à l'étape 3, il suffit de calculer , , et .

Si on utilise le facteur , alors au début de l'étape 2, on a où le signe désigne une valeur quelconque. La première rotation de Givens annuler le coefficient en , on a alors Chaque nouvelle rotation annule un autre élément sous-diagonale, ce qui augmente le nombre de zéros connus jusqu'à ce que La dernière rotation a des valeurs choisis telles que . Si , ce qui arrive couramment quand on arrive à la fin du processus de convergence, alors et . Ainsi, la rotation donne qui est la matrice triangulaire supérieure attendue. On en est alors à l'étape 3 et on effectue les rotations sur les données des colonnes. La première rotation agit sur les colonnes et , produisant Le motif attendu est que chaque rotation déplace une valeur non nulle de la diagonale vers la sous-diagonale, ramenant la matrice vers une forme de Hessenberg. Ceci s'arrête à Algébriquement la forme est inchangée, mais numériquement l'élément en position est devenu bien plus petit : il y a un facteur entre lui et l'élément diagonal au-dessus, mais maintenant, l'écart est plus d'un facteur , et une nouvelle itération amènerait à un facteur : il y a convergence quadratique. En pratique, cela signifie itérations par valeur propre suffit pour avoir la convergence, et donc en tout, on peut compléter l'algorithme en étapes QR, chacune d'entre elle exécutant opérations arithmétiques (ou au moins opérations, dans le cas où est symétrique).

Visualisation

[modifier | modifier le code]
Figure 1 : Comment la sortie d'une seule itération de l'algorithme QR ou LR varie en fonction de son entrée

L'algorithme QR de base peut être visualisé dans le cas où A est une matrice symétrique définie positive. Dans ce cas, A peut être représenté comme une ellipse en 2 dimensions ou un ellipsoïde en dimensions supérieures. La relation entre l’entrée de l’algorithme et une itération unique peut alors être représentée comme dans la figure 1. Le résultat de l'algorithme LR est représenté à côté de l'algorithme QR.

Une seule itération provoque l'inclinaison ou la « chute » de l'ellipse vers l'axe des x. Dans le cas où le grand demi-axe de l'ellipse est parallèle à l'axe des x, une itération de QR ne fait rien. Une autre situation dans laquelle l'algorithme « ne fait rien » est lorsque le grand demi-axe est parallèle à l'axe des y au lieu de l'axe des x. Dans ce cas, l’ellipse peut être considérée comme étant en équilibre instable sans pouvoir tomber dans un sens ou dans l’autre. Dans les deux cas, la matrice est diagonale. Une situation dans laquelle une itération de l'algorithme « ne fait rien » est appelée un point fixe . La stratégie employée par l'algorithme est une méthode du point fixe . On observe alors qu’un point fixe est stable tandis que l’autre est instable. Si l'ellipse était inclinée très légèrement par rapport au point fixe instable, une itération de l'algorithme QR entraînerait l'inclinaison de l'ellipse à l'opposé du point fixe au lieu de s'en rapprocher. Finalement, l’algorithme convergerait vers un point fixe différent, mais cela prendrait beaucoup de temps.

Recherche de valeurs propres ou des vecteurs propres

[modifier | modifier le code]
Figure 2 : Comment la sortie d'une seule itération de QR ou LR est affectée lorsque deux valeurs propres se rapprochent l'une de l'autre

Il convient de souligner que trouver même un seul vecteur propre d'une matrice symétrique n'est pas calculable (en arithmétique réelle exacte selon les définitions de l'analyse calculable )[6]. Cette difficulté existe chaque fois que les multiplicités des valeurs propres d'une matrice ne sont pas connaissables. En revanche, le même problème ne se pose pas pour trouver des valeurs propres. Les valeurs propres d'une matrice sont toujours calculables.

On peut discuter de la manière dont ces difficultés se manifestent dans l’algorithme QR de base. Ceci est illustré dans la figure 2. Il faut rappeler que les ellipses représentent des matrices symétriques définies positives. Lorsque les deux valeurs propres de la matrice d'entrée se rapprochent l'une de l'autre, l'ellipse d'entrée se transforme en cercle, soit un multiple de la matrice identité (un quasi-cercle correspond à un quasi-multiple de la matrice identité dont les valeurs propres sont presque égales aux entrées diagonales de la matrice). Par conséquent, le problème de la recherche approximative des valeurs propres s'avère facile dans ce cas. Cependant, une itération de QR (ou LR) incline de moins en moins les demi-axes à mesure que l'ellipse d'entrée se rapproche d'un cercle. Les vecteurs propres ne peuvent être connus que lorsque les demi-axes sont parallèles à l'axe des x et à l'axe des y. Le nombre d'itérations nécessaires pour obtenir un quasi-parallélisme augmente sans limite à mesure que l'ellipse d'entrée devient plus circulaire.

Bien qu'il puisse être impossible de calculer la décomposition propre d'une matrice symétrique arbitraire, il est toujours possible de perturber la matrice d'une quantité arbitrairement petite et de calculer la décomposition propre de la matrice résultante. Dans le cas où la matrice est représentée comme une forme quasi-circulaire, la matrice peut être remplacée par une matrice dont la représentation est un cercle parfait. Dans ce cas, la matrice est un multiple de la matrice identité et sa décomposition en valeurs propres est immédiate. Il faut alors garder à l'esprit que la base propre résultante peut être assez éloignée de la base propre d'origine.

Accélération : Déplacement et déflation

[modifier | modifier le code]

Le ralentissement lorsque l'ellipse devient plus circulaire a un effet inverse : il s'avère que lorsque l'ellipse devient plus étirée - et moins circulaire - alors la rotation de l'ellipse devient plus rapide. Un tel étirement peut être induit lorsque la matrice que l'ellipse représente est remplacé par est approximativement la plus petite valeur propre de . Dans ce cas, le rapport des deux demi-axes de l'ellipse se rapproche de l'infini . Dans les dimensions supérieures, un tel décalage rend la longueur du plus petit demi-axe d'un ellipsoïde petite par rapport aux autres demi-axes, ce qui accélère la convergence vers la plus petite valeur propre, mais n'accélère pas la convergence vers les autres valeurs propres. Cela devient inutile lorsque la plus petite valeur propre est entièrement déterminée, la matrice doit alors être réduite, ce qui signifie simplement supprimer sa dernière ligne et sa dernière colonne.

Le problème du point fixe instable doit également être résolu. L’heuristique de décalage est souvent conçue pour traiter également ce problème : les décalages pratiques sont souvent discontinus et aléatoires. Le décalage de Wilkinson, qui convient bien aux matrices symétriques comme celles visualisées supra, est particulièrement discontinu.

Algorithme QR implicite

[modifier | modifier le code]

Dans la pratique informatique moderne, l'algorithme QR est exécuté dans une version implicite qui facilite l'introduction de plusieurs décalages[2]. La matrice est d'abord amenée à la forme de Hessenberg supérieure comme dans la version explicite ; puis, à chaque étape, la première colonne de est transformée via une transformation de Householder de petite taille vers la première colonne de [pas clair] (ou ), où , de degré , est le polynôme qui définit la stratégie de changement de vitesse (souvent , où et sont les deux valeurs propres de la queue sous-matrice principale de , le soi-disant double décalage implicite). Puis des transformations successives de taille de Householder sont effectuées afin de renvoyer la matrice de travail à la forme supérieure de Hessenberg. Cette opération est connue sous le nom de « bulge chasing », en raison de la forme particulière des entrées non nulles de la matrice le long des étapes de l'algorithme. Comme dans la première version, la réduction est effectuée dès qu'une des entrées sous-diagonales de est suffisamment petit.

Proposition de changement de nom

[modifier | modifier le code]

Étant donné que dans la version implicite moderne de la procédure, aucune décomposition QR n'est explicitement effectuée, certains auteurs, par exemple Watkins[7], ont suggéré de changer son nom en algorithme de Francis . Golub et Van Loan utilisent le terme Francis QR step .

Interprétation et convergence

[modifier | modifier le code]

L'algorithme QR peut être considéré comme une variante plus sophistiquée de l' algorithme de la puissance itérée , qui consiste à multiplier à plusieurs reprises A par un seul vecteur, en normalisant après chaque itération. Le vecteur converge vers un vecteur propre de la plus grande valeur propre. Au lieu de cela, l'algorithme QR fonctionne avec une base complète de vecteurs, en utilisant la décomposition QR pour renormaliser (et orthogonaliser). Pour une matrice symétrique A, lors de la convergence, AQ = Q Λ, où Λ est la matrice diagonale des valeurs propres vers lesquelles A a convergé, et où Q est une composition de toutes les transformations de similarité orthogonales nécessaires pour y parvenir. Ainsi, les colonnes de Q sont les vecteurs propres.

L'algorithme QR a été précédé par l'algorithme LR, qui utilise la décomposition LU au lieu de la décomposition QR. L'algorithme QR est plus stable, donc l'algorithme LR est rarement utilisé de nos jours. Cependant, cela représente une étape importante dans le développement de l’algorithme QR.

L'algorithme LR a été développé au début des années 1950 par Heinz Rutishauser, qui travaillait à l'époque comme assistant de recherche d'Eduard Stiefel à l'école polytechnique de Zurich. Stiefel a suggéré à Rutishauser d'utiliser la séquence de moments yT
0
Akx0, k = 0, 1, ...
(où x0 et y0 sont des vecteurs arbitraires) pour trouver les valeurs propres de A. Rutishauser a pris un algorithme d'Alexander Aitken pour cette tâche et l'a développé en algorithme quotient-différence ou algorithme qd. Après avoir organisé le calcul sous une forme appropriée, il a découvert que l'algorithme qd est en fait l'itération Ak = LkUk (décomposition LU), Ak +1 = UkLk, appliquée sur une matrice tridiagonale, d'où découle l'algorithme LR.

Autres variantes

[modifier | modifier le code]

Une variante de l'algorithme QR, l'algorithme de Golub-Kahan-Reinsch, commence par réduire une matrice générale en une matrice bidiagonale[8]. Cette variante de l'algorithme QR pour le calcul de valeur singulières a été d'abord décrit par Golub et Kahan 1965. La routine DBDSQR de la bibliothèque LAPACK implémente cette méthode itérative, avec certaines modifications pour couvrir le cas om les valeurs singulières sont très petites (Demmel et Kahan 1990). Après une première étape utilisant des transformations de Householder et, si approprié, une décomposition QR, on obtient la routine DGESVD pour la décomposition en valeurs singulières. L'algorithme QR peut aussi être implémenté en dimensions infinies avec des résultats de convergence équivalents[9],[10]

Références

[modifier | modifier le code]
  1. Francis, « The QR Transformation, II », The Computer Journal, vol. 4, no 4,‎ , p. 332–345 (DOI 10.1093/comjnl/4.4.332)
  2. a et b G. H. Golub et C. F. Van Loan, Matrix Computations, Baltimore, Johns Hopkins University Press, (ISBN 0-8018-5414-8)
  3. a et b James W. Demmel, Applied Numerical Linear Algebra, SIAM,
  4. a et b Lloyd N. Trefethen et David Bau, Numerical Linear Algebra, SIAM,
  5. Ortega et Kaiser, « The LLT and QR methods for symmetric tridiagonal matrices », The Computer Journal, vol. 6, no 1,‎ , p. 99–101 (DOI 10.1093/comjnl/6.1.99)
  6. « linear algebra - Why is uncomputability of the spectral decomposition not a problem? », MathOverflow (consulté le )
  7. David S. Watkins, The Matrix Eigenvalue Problem: GR and Krylov Subspace Methods, Philadelphia, PA, SIAM, (ISBN 978-0-89871-641-2)
  8. (en) Sergey Anatolyevich Bochkanov, « ALGLIB User Guide - General Matrix operations - Singular value decomposition », sur ALGLIB Project, (consulté le )
  9. (en) Percy Deift, Luenchau C. Li et Carlos Tomei, « Toda flows with infinitely many variables », Journal of Functional Analysis, vol. 64, no 3,‎ , p. 358–402 (DOI 10.1016/0022-1236(85)90065-5 Accès libre)
  10. (en) Matthew J. Colbrook et Anders C. Hansen, « On the infinite-dimensional QR algorithm », Numerische Mathematik, vol. 143, no 1,‎ , p. 17–83 (DOI 10.1007/s00211-019-01047-5 Accès libre, arXiv 2011.08172)
  • Demmel et Kahan, « Accurate singular values of bidiagonal matrices », SIAM Journal on Scientific and Statistical Computing, vol. 11, no 5,‎ , p. 873–912 (DOI 10.1137/0911052, CiteSeerx 10.1.1.48.3740)
  • Golub et Kahan, « Calculating the singular values and pseudo-inverse of a matrix », Journal of the Society for Industrial and Applied Mathematics, Series B: Numerical Analysis, vol. 2, no 2,‎ , p. 205–224 (DOI 10.1137/0702016, JSTOR 2949777, Bibcode 1965SJNA....2..205G)

Liens externes

[modifier | modifier le code]