Was ist der Unterschied zwischen der konjugierten Gradientenmethode und der bikonjugierten Gradientenmethode?

9

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?

user2196452
quelle

Antworten:

11

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ösungenk

.Kk(A,b)={b,Ab,A2b,,Akb}

Die wesentliche Idee der Bikonjugat-Gradientenmethode besteht darin, einen zweiten Krylov-Unterraum beizubehalten

Kk(A,b)={b,Ab,(A)2b,,(A)kb}

AAx=Ab

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:

  1. 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.

  2. 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?

Daniel Shapero
quelle
Kennen Sie Open Source-Parallelbibliotheken für BiCG?
user2196452
Aus rein theoretischem Interesse: Wenn Sie BiCG (oder BiCGStab) auf eine symmetrische positive Matrix anwenden, entspricht diese Methode formal etwas Bekanntem?
Shuhalo
5

Die konjugierte Gradientenmethode löst nur das System

Ax=b

A

f(x)=12xTAxbTx

Beachten Sie, dass die Ableitung ist

f(x)=12ATx+12Axb

AAT=A

f(x)=Axb

f(x)=0xA

Die bikonjugierte Gradientenmethode funktioniert für jedes System. Dies geschieht durch Lösen beider

Ax=b

zusammen mit

ATx=b

A

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.

Godric Seer
quelle