Vorkonditionierer für eine matrixfreie Methode zur Lösung von Ax = b

9

Ich muss Ax = b lösen, aber mir ist klar, dass das Speichern der Matrixkoeffizienten meines Problems zu viel Speicher benötigt, selbst wenn es spärlich ist. Jetzt überlege ich mir, eine matrixfreie Methode zu verwenden, da die gleichen Koeffizienten viel Zeit in der Matrix erscheinen, sodass ich mein eigenes privates Speicherschema verwenden (und übrigens die Cache-Effizienz erhöhen) kann.

Ich schaue auf Petsc, das eine Schnittstelle für solche matrixfreien linearen Operatoren bietet, aber was ich nicht wirklich verstehe, ist, wie der Vorkonditionierer dann von Petsc berechnet wird. Oder sollte ich meinen eigenen Vorkonditionierer bereitstellen? Wenn ja, gibt es Werkzeuge oder Rezepte, um Vorkonditionierer aus einem matrixfreien linearen Operator zu konstruieren?

Weitere Informationen zu meinem Operator: Es ist unsymmetrisch, nicht diagonal dominant, sondern wird von einigen Seitenbändern dominiert (aber es ist auch nicht diagonal gebändert).

nat chouf
quelle

Antworten:

7

Sie müssen Ihren eigenen Vorkonditionierer rollen. Wenn Sie die Matrix kennen, sollte es nicht besonders schwierig sein, beispielsweise einen SSOR-Vorkonditionierer zu implementieren. Wenn Sie etwas anderes über das Problem wissen, zum Beispiel, dass es von einer PDE stammt, deren Lösung auf einem gröberen Netz gut angenähert werden kann, können Sie auch Vorkonditionierer konstruieren, indem Sie das Problem auf das gröbere Netz beschränken, dort lösen und das Problem erweitern Lösung zurück zum Original. Einschränkung und Verlängerung können als matrixfreie Operationen implementiert werden.

Wolfgang Bangerth
quelle