Si votre matrice a une dimension au milieu des dizaines de milliers ou moins, utilisez une méthode directe, bien qu'il n'y ait pas beaucoup de méthodes directes disponibles gratuitement pour les systèmes symétriques indéfinis (en fait, aucune que je sache n'est open source). Il y a MA57 de la HSL, mais ce n'est gratuit que pour une utilisation académique. Vous pouvez certainement ignorer la symétrie et utiliser UMFPACK .
Aux alentours de quelques dizaines de centaines de dimensions, l'utilisation de la mémoire d'une méthode directe commence à dépasser ce qu'un ordinateur de bureau typique peut raisonnablement gérer, donc à moins d'avoir une machine à mémoire partagée robuste, vous devrez passer à des méthodes itératives. Pour les problèmes indéfinis, vous pouvez spécialiser le BiCG (gradient biconjugué) pour les systèmes symétriques, bien qu'une panne soit possible. Il existe un MINRES-QLP récemment publié pour les systèmes symétriques qui offre une plus grande stabilité numérique.
Les deux méthodes nécessitent des implémentations plutôt différentes, car pour les méthodes directes, vous devez réellement former la matrice, tandis que dans l'approche itérative, vous ne formerez généralement pas la matrice explicitement.
Il existe un certain nombre de raisons pour lesquelles une approche peut être plus rapide que l'autre, en particulier en fonction de la dimension de la matrice. Pour les systèmes très mal conditionnés, les méthodes itératives peuvent stagner assez mal. Pour les matrices moins clairsemées, les méthodes directes finissent par créer beaucoup de remplissage, ce qui ralentit beaucoup les choses. De plus, les méthodes directes dans Matlab sont hautement optimisées (il utilise UMFPACK ou MA57 en interne), tandis que les méthodes itératives sont généralement codées directement dans Matlab, et il y a moins de possibilités d'exploiter BLAS de niveau 3 car les goulots d'étranglement sont l'application de matvecs et de produits scalaires.