Comment choisir une méthode pour résoudre des équations linéaires

31

À ma connaissance, il existe 4 façons de résoudre un système d'équations linéaires (corrigez-moi s'il y en a plus):

  1. Si la matrice système est une matrice carrée de rang complet, vous pouvez utiliser la règle de Cramer;
  2. Calculer l'inverse ou le pseudoinverse de la matrice système;
  3. Utiliser des méthodes de décomposition matricielle (l'élimination gaussienne ou gaussienne-jordanienne est considérée comme une décomposition LU);
  4. Utilisez des méthodes itératives, telles que la méthode du gradient conjugué.

En fait, vous ne voulez presque jamais résoudre les équations en utilisant la règle de Cramer ou en calculant l'inverse ou le pseudoinverse, en particulier pour les matrices de grande dimension, donc la première question est de savoir quand utiliser les méthodes de décomposition et les méthodes itératives, respectivement. Je suppose que cela dépend de la taille et des propriétés de la matrice du système.

La deuxième question est, à votre connaissance, quel type de méthodes de décomposition ou méthodes itératives conviennent le mieux à certaines matrices de système en termes de stabilité numérique et d'efficacité.

Par exemple, la méthode du gradient conjugué est utilisée pour résoudre des équations où la matrice est symétrique et définie positive, bien qu'elle puisse également être appliquée à n'importe quelle équation linéaire en convertissant en . Aussi pour une matrice définie positive, vous pouvez utiliser la méthode de décomposition de Cholesky pour rechercher la solution. Mais je ne sais pas quand choisir la méthode CG et quand choisir la décomposition Cholesky. Mon sentiment est que nous ferions mieux d'utiliser la méthode CG pour les grandes matrices.A T A x = A T bAx=bATAx=ATb

Pour les matrices rectangulaires, nous pouvons utiliser la décomposition QR ou SVD, mais encore une fois, je ne sais pas comment en choisir une.

Pour les autres matrices, je ne sais pas maintenant comment choisir le solveur approprié, telles que les matrices hermitiennes / symétriques, les matrices clairsemées, les matrices de bandes, etc.

chaohuang
la source
1
Salut @chaohuang, et bienvenue sur SciComp! Vous voudrez peut-être voir cette discussion: scicomp.stackexchange.com/questions/81/…
Paul
Bonjour @Paul, merci pour vos commentaires, est-ce que ce fil concerne uniquement les matrices clairsemées ou toute matrice?
chaohuang
6
Votre question a une portée énorme et peut être un peu trop large pour le format Q&R que nous avons ici sur l'échange de pile ... y a-t-il une classe particulière de système matriciel qui vous intéresse?
Paul
3
@chaohuang Il existe de nombreux livres sur ce sujet. Cette question revient un peu à demander à un médecin comment il choisit les traitements "en général". Si vous voulez poser une question qui n'est pas spécifique à une certaine classe de problèmes, vous devez vous mettre au travail pour vous familiariser suffisamment avec le domaine pour poser quelque chose de précis. Sinon, expliquez le problème spécifique qui vous préoccupe.
Jed Brown
2
De la FAQ: Si vous pouvez imaginer un livre entier qui répond à votre question, vous en demandez trop. Il existe des revues entières et des centaines de livres associés à cette question.
David Ketcheson

Réponses:

45

Votre question revient un peu à demander quel tournevis choisir en fonction du lecteur (slot, Phillips, Torx, ...): outre qu'il y en a trop , le choix dépend également de si vous voulez juste serrer une vis ou assembler un ensemble complet d'étagères de bibliothèque. Néanmoins, en réponse partielle à votre question, voici quelques-unes des questions que vous devez garder à l'esprit lorsque vous choisissez une méthode pour résoudre le système linéaire . Je me limiterai également aux matrices inversibles; les cas de systèmes sur ou sous-déterminés sont une question différente et devraient vraiment être des questions distinctes.Ax=b

Ax~

  1. x~x~x~x<103x
  2. À quelle vitesse en avez-vous besoin? La seule mesure pertinente ici est le temps d'horloge sur votre machine - une méthode qui évolue parfaitement sur un énorme cluster peut ne pas être le meilleur choix si vous n'en avez pas, mais vous avez l'une de ces nouvelles cartes Tesla brillantes.

Comme il n'y a pas de déjeuner gratuit, vous devez généralement décider d'un compromis entre les deux. Après cela, vous commencez à regarder la matrice (et votre matériel) pour décider d'une bonne méthode (ou plutôt, la méthode pour laquelle vous pouvez trouver une bonne implémentation). (Notez comment j'ai évité d'écrire "le meilleur" ici ...) Les propriétés les plus pertinentes ici sontA

  • La structure : est-ce que est symétrique? Est-il dense ou clairsemé? Bandé?A
  • Les valeurs propres : sont-elles toutes positives (c.-à-d., Est-ce positif est défini)? Sont-ils regroupés? Certains d'entre eux ont-ils une magnitude très petite ou très grande?A

Dans cet esprit, vous devez ensuite parcourir la (vaste) littérature et évaluer les différentes méthodes que vous trouvez pour votre problème spécifique. Voici quelques remarques générales:

  • Si vous avez vraiment besoin (près de) de la précision de la machine pour votre solution, ou si votre matrice est petite (disons, jusqu'à lignes), il est difficile de battre les méthodes directes, en particulier pour les systèmes denses (car dans ce cas, chaque multiplication de matrice sera , et si vous avez besoin de beaucoup d'itérations, ce n'est peut-être pas loin du une méthode directe a besoin). De plus, la décomposition LU (avec pivotement) fonctionne pour toute matrice inversible, contrairement à la plupart des méthodes itératives. (Bien sûr, si est symétrique et défini positif, vous utiliseriez Cholesky.)O ( n 2 ) O ( n 3 ) A1000O(n2)O(n3)A

    Cela est également vrai pour les (grandes) matrices creuses si vous ne rencontrez pas de problèmes de mémoire: les matrices creuses en général n'ont pas de décomposition LU clairsemée, et si les facteurs ne rentrent pas dans la mémoire (rapide), ces méthodes deviennent inutilisables.

    En outre, les méthodes directes ont été autour depuis longtemps, et très logiciels de haute qualité existe (par exemple, UMFPACK, OREILLONS, SuperLU pour matrices creuses) qui peuvent exploiter automatiquement la structure de bande de .A

  • Si vous avez besoin de moins de précision ou si vous ne pouvez pas utiliser de méthodes directes, choisissez une méthode de Krylov (par exemple, CG si est défini positif symétrique, GMRES ou BiCGStab sinon) au lieu d'une méthode stationnaire (telle que Jacobi ou Gauss-Seidel): elles sont généralement fonctionnent beaucoup mieux, car leur convergence n'est pas déterminée par le rayon spectral de mais par (la racine carrée) du nombre de conditions et ne dépend pas de la structure de la matrice. Cependant, pour obtenir de très bonnes performances avec une méthode Krylov, vous devez choisir un bon préconditionneur pour votre matrice - et c'est plus un métier qu'une science ...AAA

  • Si vous devez à plusieurs reprises résoudre des systèmes linéaires avec la même matrice et différents côtés droits, les méthodes directes peuvent toujours être plus rapides que les méthodes itératives car vous n'avez besoin de calculer la décomposition qu'une seule fois. (Cela suppose une solution séquentielle; si vous avez tous les côtés droit en même temps, vous pouvez utiliser les méthodes de blocage de Krylov.)

Bien sûr, ce ne sont que des directives très approximatives: pour l'une des déclarations ci-dessus, il existe probablement une matrice pour laquelle l'inverse est vrai ...

Puisque vous avez demandé des références dans les commentaires, voici quelques manuels et articles de synthèse pour vous aider à démarrer. (Ni l'un ni l'autre - ni l'ensemble - n'est complet; cette question est beaucoup trop large et dépend trop de votre problème particulier.)

Christian Clason
la source
2
J'aime bien ton analogie avec le tournevis!
Paul
@chaohuang Si cela répond à votre question, vous devez l'accepter. (Si ce n'est pas le cas, n'hésitez pas à signaler ce qui manque.)
Christian Clason
@ChristianClason l'a accepté. J'attendais et j'espérais que quelqu'un pourrait faire la lumière sur la question des matrices rectangulaires. Comme cela fait longtemps, je suppose qu'il n'y aura jamais une telle réponse :(
chaohuang
@chaohuang Merci. Si vous êtes toujours intéressé par les matrices rectangulaires, vous devriez poser une question (liée) sur "Comment choisir une méthode pour résoudre des systèmes surdéterminés".
Christian Clason
Voici une référence sur l'utilisation de méthodes itératives pour résoudre de grands systèmes clairsemés d'équations linéaires.
chaohuang