Wie kann ich das Schur-Komplement berechnen:
wo
(in einiger Reihenfolge) ist eine PETSc-Matrix ( Mat
)?
Wie kann ich das Schur-Komplement berechnen:
wo
(in einiger Reihenfolge) ist eine PETSc-Matrix ( Mat
)?
Antworten:
Die Berechnung des Schur-Komplements einer Matrix ist sehr teuer und wird in der Praxis nur sehr selten benötigt. PETSc empfiehlt dringend, Algorithmen zu vermeiden, die dies benötigen. Das Schur-Komplement einer Matrix (dicht oder dünn) ist im Wesentlichen immer dicht. Beginnen Sie also mit:
MatLUFactor()
MatCholeskyFactor()
MatGetFactor()
MatLUFactorSymbolic()
MatLUFactorNumeric()
A
MatMatSolve(A,Kba,T)
.MatMatMult(Kab,T,MAT_INITIAL_MATRIX,1.0,&S)
.MatAXPY(S,-1.0,Kbb,MAT_SUBSET_NONZERO)
.MatScale(S,-1.0)
Für die Berechnung solcher Schur-Komplemente ist es nicht sinnvoll, die KSP
iterativen Löser zu verwenden, da die Lösung vieler Probleme mittlerer Größe mit einer direkten Faktorisierung viel schneller ist als mit iterativen Lösern. Wie Sie sehen, erfordert dies viel Arbeitsraum und Rechenaufwand, sodass dies am besten vermieden wird. Es ist jedoch nicht erforderlich, das Schur-Komplement zusammenzusetzen, um Systeme damit zu lösen. Verwenden Sie diese Option , um eine Matrix zu erstellen, die die Aktion (Verwenden zum Lösen mit ) anwendet , sich jedoch nicht zusammensetzt.MatCreateSchurComplement(Kaa,Kaa_pre,Kab,Kba,Kbb,&S)
S
Kaa_pre
Kaa
Wenn Sie alternativ bereits eine Blockmatrix (in einer bestimmten Reihenfolge), können Sie dies Erstellen Sie Indexsätze ( ) isa und isb, um jeden Block zu adressieren, und erstellen Sie dann das Schur-Komplement und / oder eine für die Vorkonditionierung geeignete Näherung. Da im Allgemeinen dicht ist, können Standardvorkonditionierungsmethoden normalerweise nicht direkt auf Schur-Komplemente angewendet werden. Es gibt viele Ansätze zur Vorkonditionierung von Schur-Komplementen, einschließlich der Verwendung der EINFACHEN Näherung , um eine spärliche Matrix zu erstellen, die sich der Schur-Komplement (dies wird standardmäßig für die optionale "Vorkonditionierungs" -Matrix in zurückgegeben ).
IS
MatGetSchurComplement()
MatGetSchurComplement()
Eine andere Alternative besteht darin, die Matrizen als Differentialoperatoren zu interpretieren und ungefähre Kommutatorargumente anzuwenden, um eine spektral äquivalente Operation zu finden, die effizient angewendet werden kann (siehe die "PCD" -Vorkonditionierer von Elman, Silvester und Wathen). Eine Variante davon ist der Kommutator der kleinsten Quadrate, der eng mit der Moore-Penrose-Pseudoinverse verwandt ist und in PCLSC
dem Matrizen vom Typ verarbeitet werden MATSCHURCOMPLEMENT
.