« Algorithme d'Arnoldi » : différence entre les versions
Créé en traduisant la page « Arnoldi iteration » Balises : Liens d’homonymie Traduction de contenu Traduction de contenu 2 |
(Aucune différence)
|
Version du 30 novembre 2023 à 00:31
En algèbre linéaire numérique, la méthode d'Arnoldi est un algorithme de recherche de valeurs propres prenant la forme d'une méthode itérative . Elle trouve une approximation des valeurs propres et des vecteurs propres de matrices carrées (éventuellement non hermitiennes ) en construisant une base orthonormée de leur sous-espace de Krylov, ce qui la rend particulièrement utile lorsqu'il s'agit de grandes matrices creuses ou encore d'opérateurs linéaires peu coûteux à évaluer pour toute autre raison.
La méthode Arnoldi appartient à une classe d'algorithmes d'algèbre linéaire qui donnent un résultat dit partiel, après un petit nombre d'itérations, en contraste des méthodes dites directes qui doivent être complétées exhaustivement pour donner des résultats utiles (voir par exemple la Transformation de Householder). Le résultat partiel dans ce cas donne les premiers vecteurs de la base que l’algorithme construit.
Lorsqu'elle est appliquée aux matrices hermitiennes (ou symétriques), cette méthode est adaptée via l'algorithme de Lanczos. Elle a été inventée par W. E. Arnoldi en 1951. [1]
Sous-espaces de Krylov et puissances itérées
Une méthode intuitive pour trouver la plus grande valeur propre (en valeur absolue) d'une matrice m × m donnée est la méthode de la puissance itérée : en commençant par un vecteur initial arbitraire b, calculer les puissances successives et normaliser le résultat après chaque application de la matrice .
Cette suite converge vers le vecteur propre correspondant à la valeur propre de plus grande valeur absolue, souvent notée . Cependant, une grande partie des calculs potentiellement utiles sont d'une manière perdus en n'utilisant que le résultat final, . Ce constat nous invite donc à former à la place ce que l'on appelle la matrice de Krylov :
Les colonnes de cette matrice ne sont en général pas orthogonales, mais on peut en extraire une base orthogonale, via une méthode telle que l'orthogonalisation de Gram–Schmidt . L'ensemble de vecteurs résultant est donc une base orthogonale du sous-espace de Krylov, .
La méthode d'Arnoldi
Les itérations de la méthode d'Arnoldi utilisent l'algorithme Gram–Schmidt pour produire une séquence de vecteurs orthonormés, , appelés vecteurs d'Arnoldi, tels que pour tout , les vecteurs couvrent le sous-espace de Krylov . L'algorithme qui en découle est le suivant :
Entrée = La matrice A de taille m×m Sortie = La matrice H, et une matrice Q contenant la base du sous-espace |
Initialiser un vecteur arbitraire q1 de norme 1, et une matrice vide H de taille (n+1)×n Répéter pour k = 2, 3, ... qk := A qk−1 Répéter pour j de 1 à k − 1 hj, k−1 := qj • qk qk ← qk − hj, k−1 qj hk, k−1 := ‖qk‖ qk ← qk / hk, k−1 |
La boucle interne de ce pseudo-code projette les coordonnées de perpendiculairement à l'unique hyperplan porté par dans . Cela garantit l’orthogonalité de tous les vecteurs générés successivement.
L'algorithme parvient à son terme si à une itération donnée est le vecteur nul. Cela se produit lorsque le polynôme minimal de est de degré . Dans la plupart des applications de la méthode d'Arnoldi, y compris l'algorithme des valeurs propres ci-dessus et d'autres applications comme GMRES, l'algorithme a convergé à ce stade, c'est à dire que .
Chaque itération de la boucle principale demande un produit matrice-vecteur et environ opérations en virgule flottante.
Voici ci-dessous une présentation de l'algorithme dans le langage de programmation Python avec le support de la bibliothèque de calcul numérique NumPy :
import numpy as np
def arnoldi_method(A, b, n: int):
"""Calcule une base du sous-espace de Krylov de dimension (n + 1) pour la matrice A.
Il s'agit de l'espace genere par les vecteurs {b, Ab, ..., A^n b}.
Fonctionne pour des matrices complexes ou flotantes.
Parameters
----------
A : numpy.array
Une matrice de dimension m * m.
b : numpy.array
Vecteur de depart (taille m).
n : int
La dimension de l'espace desire, ou son degre, moins 1. Doit etre >= 1.
Returns
-------
Q : numpy.array
Une matrice de dimension m * (n + 1), dont les colonnes forment une base orthogonale du sous-espace desire.
h : numpy.array
Une matrice de dimension (n + 1) * n. Une base sur Q. Elle est Hessenberg-superieure.
Note
----
Notez que les dernieres colonnes de Q et h peuvent etre nulles si l'algorithme a converge plus tot que n
"""
assert A.shape[0] == A.shape[1]
m = A.shape[0]
assert 1 <= n <= m
eps = 1e-12
# Initialisation des matrices
h = np.zeros((n + 1, n))
Q = np.zeros((m, n + 1))
# Normalise le premier vecteur de la base
Q[:, 0] = b / np.linalg.norm(b, 2)
for k in range(1, n + 1):
# Nouveau candidat par la methode des puissances iterees
v = np.dot(A, Q[:, k - 1])
for j in range(k):
# Re-orthogonalise par Gram-Schmidt
h_tilde = np.dot(Q[:, j].conj(), v)
v = v - h_tilde * Q[:, j]
# Le coefficient de projection est conserve
h[j, k - 1] = h_tilde
h_tilde = np.linalg.norm(v, 2)
if h_tilde > eps:
# Le vecteur est ajoute a la base, sauf si il est trop petit
# auquel cas on considere que l'algorithme a converge
Q[:, k] = v / h[k, k - 1]
h[k, k - 1] = h_tilde
else:
return Q, h
return Q, h
Propriétés de la méthode d'Arnoldi
Soit la matrice de taille par formée par les premiers vecteurs d'Arnoldi , et soit la matrice de Hessenberg supérieure formée par les nombres calculés par l'algorithme :
La méthode d'orthogonalisation doit être spécifiquement choisie de telle sorte que les composantes précédentes de la base de Krylov en cours de composition soient supprimées des nouveaux vecteurs Krylov ajoutés. Comme peut être exprimé comme une combinaison de par construction, il est orthogonal à .
Nous avons alors
La matrice peut être considérée le changement de base de dans le sous-espace avec les vecteurs d'Arnoldi comme base orthogonale : est projetée orthogonalement sur . La matrice peut être caractérisée par la condition d'optimalité suivante. Le polynôme caractéristique de minimise parmi tous les polynômes unitaires de degré . Ce problème d’optimalité a une solution unique si et seulement si l’algorithme arrive à son terme après itérations.
L'extension de la base à l'itération contenue dans la matrice est caractérisée par la relation de récurrence :
telle que
soit une matrice de dimensions formée en ajoutant une ligne supplémentaire à .
Trouver des valeurs propres avec la méthode d'Arnoldi
L'idée de la méthode d'Arnoldi en tant qu'algorithme de recherche de valeurs propres est de calculer les valeurs propres de dans son sous-espace de Krylov. Les valeurs propres de Hn sont appelées valeurs propres de Ritz . Puisque est une matrice de Hessenberg de taille modeste, ses valeurs propres peuvent être calculées efficacement, par exemple avec l'algorithme QR qui réalise des décompositions QR successives, ou une méthode similaire l'algorithme de Francis . Ce dernier lui-même peut également être considéré comme étant lié aux itérations de puissance, opérant sur des sous-espace de Krylov imbriqués. En fait, la forme la plus élémentaire de l'algorithme de Francis semble être de choisir égal à et d'étendre à la pleine dimension des colonnes de .[2]
Un fait notable est qu'il s'agit aussi d'un exemple de la méthode Rayleigh-Ritz .
On observe souvent en pratique que certaines valeurs propres de Ritz convergent vers les valeurs propres de . Puisque est de dimension , elle a au plus n valeurs propres, et toutes les valeurs propres de ne peuvent pas être approchées avec certitude par ses valeurs propres de Ritz. Généralement, ces dernières convergent vers les plus grandes valeurs propres de . Pour obtenir les plus petites valeurs propres de , l’inverse (opération) de doit être utilisé à la place. Cela peut être lié à la construction de Hn comme la matrice dont le polynôme caractéristique minimise . Un bon moyen d'obtenir des polynômes bornés est de choisir le polynôme tel que soit "petit" chaque fois que est une valeur propre de . Par conséquent, les zéros de (et donc les valeurs propres de Ritz) seront proches des valeurs propres de .
Cependant, les détails ne sont pas encore établis par la littérature, tandis que si est hermitienne, la méthode d'Arnoldi peut être reformulé comme l'algorithme de Lanczos pour laquelle la théorie est plus complète.
Méthode Arnoldi redémarrée implicitement (IRAM)
Pour des raisons informatiques de stockage, les implémentations courantes des méthodes d'Arnoldi "redémarrent", généralement, après un certain nombre d'itérations. Une innovation majeure en la matière est due à Lehoucq et Sorensen qui ont proposé la méthode d'Arnoldi implicitement redémarrée. [3] Ils ont également implémenté l'algorithme dans une bibliothèque logicielle disponible gratuitement appelé ARPACK [4] (elle est utilisée dans de nombreux langages comme Python via SciPy, Julia, ou encore Matlab). Cela a donné lieu à un certain nombre d’autres variantes, notamment la méthode de Lanczos implicitement redémarrée. [5] [6] [7] Cela a également influencé la manière dont les autres méthodes redémarrées sont analysées. [8] Les résultats théoriques ont montré de meilleurs résultats de convergence avec une augmentation de la dimension du sous-espace de Krylov. Cependant, aucune valeur a priori de qui conduirait à une convergence optimale n’est connue. Récemment, une stratégie de "commutation dynamique" [9] a été proposée : elle fait varier la dimension avant chaque redémarrage et conduit ainsi à une amélioration du taux de convergence.
Voir également
GMRES est une méthode de résolution de systèmes linéaires d'équations () reposant sur la méthode d'Arnoldi pour construire un espace dans lequel minimiser les résidus .
Références
- (en) Arnoldi, « The principle of minimized iterations in the solution of the matrix eigenvalue problem », Quarterly of Applied Mathematics, vol. 9, no 1, , p. 17–29 (ISSN 0033-569X, DOI 10.1090/qam/42792, lire en ligne)
- David S. Watkins. Francis' Algorithm Washington State University. Retrieved 14 December 2022
- R. B. Lehoucq et D. C. Sorensen, « Deflation Techniques for an Implicitly Restarted Arnoldi Iteration », SIAM Journal on Matrix Analysis and Applications, vol. 17, no 4, , p. 789–821 (DOI 10.1137/S0895479895281484, hdl 1911/101832)
- R. B. Lehoucq, D. C. Sorensen et C. Yang, « ARPACK Users Guide: Solution of Large-Scale Eigenvalue Problems with Implicitly Restarted Arnoldi Methods » [archive du ], SIAM, (consulté le )
- D. Calvetti, L. Reichel et D.C. Sorensen, « An Implicitly Restarted Lanczos Method for Large Symmetric Eigenvalue Problems », ETNA,
- E. Kokiopoulou, C. Bekas et E. Gallopoulos, « An Implicitly Restarted Lanczos Bidiagonalization Method for Computing Smallest Singular Triplets », SIAM,
- Zhongxiao Jia, « The refined harmonic Arnoldi method and an implicitly restarted refined algorithm for computing interior eigenpairs of large matrices », Appl. Numer. Math., vol. 42, no 4, , p. 489–512 (DOI 10.1016/S0168-9274(01)00132-5, S2CID 17172589)
- Andreas Stathopoulos and Yousef Saad and Kesheng Wu, « Dynamic Thick Restarting of the Davidson, and the Implicitly Restarted Arnoldi Methods », SIAM Journal on Scientific Computing, vol. 19, , p. 227–245 (DOI 10.1137/S1064827596304162)
- K.Dookhitram, R. Boojhawon et M. Bhuruth, « A New Method For Accelerating Arnoldi Algorithms For Large Scale Eigenproblems », Math. Comput. Simulat., vol. 80, no 2, , p. 387–401 (DOI 10.1016/j.matcom.2009.07.009)
- WE Arnoldi, "The principle of minimized iterations in the solution of the matrix eigenvalue problem", Quarterly of Applied Mathematics, volume 9, pages 17-29, 1951.
- Yousef Saad, "Numerical Methods for Large Eigenvalue Problems", Manchester University Press, 1992. (ISBN 0-7190-3386-1)ISBN 0-7190-3386-1 .
- Lloyd N. Trefethen et David Bau, III, "Numerical Linear Algebra", Society for Industrial and Applied Mathematics, 1997. (ISBN 0-89871-361-7)ISBN 0-89871-361-7 .
- Jaschke, Leonhard : "Preconditioned Arnoldi Methods for Systems of Nonlinear Equations". (2004). (ISBN 2-84976-001-3)