Ich versuche, eine 2D-Poisson-Gleichung durch endliche Differenzen zu lösen. Dabei erhalte ich eine spärliche Matrix mit nur Variablen in jeder Gleichung. Wenn die Variablen beispielsweise wären, würde die Diskretisierung ergeben:
Ich weiß, dass ich dieses System durch eine iterative Methode lösen kann, aber mir kam der Gedanke, dass ich, wenn ich die Variablen entsprechend anordnete, möglicherweise eine gebänderte Matrix erhalten kann, die durch eine direkte Methode (dh Gaußsche Elimination w) gelöst werden kann / o schwenken). Ist das möglich? Gibt es Strategien, um dies für andere, vielleicht weniger strukturierte, dünn besetzte Systeme zu tun?
Antworten:
Dies ist ein gut untersuchtes Problem auf dem Gebiet der dünnbesetzten direkten Löser. Ich empfehle dringend, Joseph Lius Überblick über die multifrontale Methode zu lesen , um eine bessere Vorstellung davon zu bekommen, wie sich Nachbestellungen und Superknoten auf die Füll- und Lösungszeit auswirken.
Verschachtelte Dissektion ist eine äußerst häufige Methode zum Generieren der Neuanordnung und besteht im Wesentlichen aus rekursiver Graphpartitionierung. Metis ist der de - facto - Standard für Graphpartitionierung, und Sie können über einige der Ideen dahinter lesen hier . Ein weiteres häufig verwendetes Paket ist SCOTCH , und Chaco ist ebenfalls wichtig, da die Autoren eine mehrstufige Graphpartitionierung eingeführt haben , die auch die Grundidee hinter MeTiS ist .
George und Liu zeigten in ihrem klassischen Buch , dass 2d dünnen Direkt Lösungen erfordern nur Arbeit und O ( n log n ) Speicher, während 3d dünnt Direkt erfordert O ( n 2 ) Arbeit und O ( n 4 / 3 ) Speicher.O(n3/2) O(nlogn) O(n2) O(n4/3)
quelle
Cuthill-McKee ist der De-facto- Standard für das, was Sie tun möchten. Wenn Sie mit dieser Methode spielen möchten, gibt es eine einfach zu verwendende Implementierung des Algorithmus (und seiner Umkehrung) in der Boost Graph Library (BGL), und die Dokumentation enthält Beispiele zu seiner Verwendung.
quelle
Apropos multifrontal Methoden, Tim Davis , der für LU - Faktorisierung (auf multifrontal Methoden arbeitet UMFPACK ) eine Anzahl von Routinen , die Matrizen werden neu anordnen Fill-in zu minimieren. Sie finden sie hier als Teil von SuiteSparse . SuiteSparse verwendet MeTiS.
Eine andere Sache, die Sie beachten sollten: In einigen Fällen können Sie Variablen geschickt so anordnen, dass Sie überlappende oder nahezu überlappende Muster erhalten, was Ihnen die Mühe (und die CPU-Zeit) erspart, diese Algorithmen aufzurufen. Diese clevere Neuordnung erfordert jedoch Ihre Einsicht und ist bei weitem nicht so allgemein wie die graphentheoretischen Neuordnungsalgorithmen, die die Menschen hier in ihren Antworten erwähnt haben.
quelle
Es gibt einen Algorithmus namens ADI (Alternating Direction Implicit) in angewandten Mathematikkreisen und einen Split-Operator in Physikkreisen, der im Grunde das tut, was Sie beschreiben. Es ist eine iterative Methode und folgt dieser grundlegenden Prozedur:
Wiederholen Sie 1 und 2, bis der Fehler so klein ist, wie Sie es möchten.
Ich kenne die formale Komplexität dieses Algorithmus nicht, aber ich habe festgestellt, dass er jedes Mal, wenn ich ihn verwende, in weniger Iterationen konvergiert als Dinge wie Jacobi und Gauss-Seidel.
quelle