Was ist der Unterschied zwischen diesen beiden Methoden? Kann ein Problem, das mit einer Methode gelöst werden kann, mit der anderen gelöst werden? Können beide / oder einer von ihnen mit OpenMP und / oder MPI parallelisiert werden?
quelle
Was ist der Unterschied zwischen diesen beiden Methoden? Kann ein Problem, das mit einer Methode gelöst werden kann, mit der anderen gelöst werden? Können beide / oder einer von ihnen mit OpenMP und / oder MPI parallelisiert werden?
Die konjugierte Gradientenmethode ist der nachweislich schnellste iterative Löser, jedoch nur für symmetrische, positiv definierte Systeme. Was schrecklich praktisch wäre, wäre, wenn es eine iterative Methode mit ähnlichen Eigenschaften für unbestimmte oder nicht symmetrische Matrizen gäbe.
Die CG-Methode sucht bei jedem Schritt innerhalb des Krylov-Unterraums nach ungefähren Lösungen
.
Die wesentliche Idee der Bikonjugat-Gradientenmethode besteht darin, einen zweiten Krylov-Unterraum beizubehalten
Leider schlägt dies fehl, wenn Sie es naiv anwenden. Durch Ausführen eines Schritts des GMRES-Algorithmus (Generalized Minimum Residual) nach jedem BiCG-Schritt ist die resultierende Iteration jedoch stabil. Dies wird üblicherweise als BiCG-Stab bezeichnet.
BiCG-Stab ist also (im Prinzip) ein allgemeinerer Löser als CG, leidet jedoch unter einer schlechteren Effizienz, wenn es auf die Probleme angewendet wird, für die CG vorgesehen war. BiCG oder BiCG-Stab erfordern mehr Matrix-Vektor-Multiplikationen und mehr Punktprodukte. Wenn Sie sie also über Multiprocessing mit verteiltem Speicher parallelisieren, entsteht ein höherer Kommunikationsaufwand. Sie können jedoch beliebig skaliert werden.
Hier gibt es zwei bemerkenswerte Dinge, die wichtiger sind als all der andere Müll, den ich gerade gesagt habe:
Für jede iterative Methode (BiCG, GMRES, QMR ...) gibt es eine Matrix, die dazu führt, dass sie nicht in der Arithmetik mit endlicher Genauigkeit konvergiert.
Daher ist es wahrscheinlich wichtiger, einen guten Vorkonditionierer für Ihre spezifische Matrix zu finden, als den optimalen iterativen Löser der äußeren Ebene zu verwenden.
BEARBEITEN: Für Open-Source-Bibliotheken sind PETSc und Trilinos die beiden beliebtesten . Ich empfehle Ihnen dringend, auch die Python-Bindungen zu erhalten, nämlich Jewsc4py und PyTrilinos. Sie können auch Eigen ausprobieren . Einerseits hat es nicht viele Funktionen, andererseits hat es genau das, was Sie brauchen und nicht mehr; Wenn Sie den Code lesen möchten, anstatt ihn nur zu verwenden, ist Eigen möglicherweise der einfachste.
Siehe auch: Yousef Saad, Iterative Methoden für spärliche lineare Systeme ; Nachtigal et al., Wie schnell sind Nonsymmetrix-Matrix-Iterationen?
Die konjugierte Gradientenmethode löst nur das System
Beachten Sie, dass die Ableitung ist
Die bikonjugierte Gradientenmethode funktioniert für jedes System. Dies geschieht durch Lösen beider
zusammen mit
Was Ihre Parallelität angeht, können Sie bei großen Systemen viel Parallelität in der linearen Algebra erzielen, die an den Solver-Iterationen beteiligt ist. Es sollte also keinen Grund geben, warum eine parallele lineare Algebra-Bibliothek nicht zu Leistungssteigerungen führen würde.
quelle