Diagonale Aktualisierung einer symmetrischen Positiv-Definitiv-Matrix

19

ist einespärliche Matrix mit n × n symmetrischen positiv definierten (SPD) Werten. G ist eine spärliche Diagonalmatrix. n ist groß ( n > 10000) und die Anzahl der Nichtzeros im G beträgt normalerweise 100 ~ 1000.An×nGnnG

wurde in der Cholesky-Form als L D L T faktorisiert.ALDLT

Wie können und D effizient aktualisiert werden, wenn A zu A + G wird ?LDAA+G


quelle
Hat G nur positive Elemente? In diesem Fall handelt es sich um eine unbedeutende Obergrenze: Betrachten Sie das diagonale Update als Summe der Rang-1-Updates. Es gibt O (n ^ 2) Methoden, um die LDL ^ t-Faktorisierung eines Rank-One-Updates zu berechnen (die Google-Suche liefert Beispiele). Dann wird Ihre diagonale Aktualisierung in O (rn ^ 2) ausgeführt, wobei r die Anzahl der diagonalen Elemente ungleich Null von G ist. Angesichts der besonderen Art dieser Aktualisierungen gibt es Verknüpfungen zum Speichern einiger Berechnungen, aber es ist nicht klar, ob dies möglich ist Reduzieren Sie die Reihenfolge unter O (rn ^ 2).
3
Ich stimme zu - ich glaube nicht, dass es eine Möglichkeit gibt, diagonale Aktualisierungen einer Cholesky-Faktorisierung schneller durchzuführen, als nur die Faktorisierung zu wiederholen, aber Aktualisierungen der ersten Stufe können in -Zeit durchgeführt werden, und Sie müssen nur eine für jede durchführen ungleich Null auf den diagonalen von G . O(m2)G
Brian Borchers
10
Für und n n z ( G ) zu Hunderten ist es schwer, Refactoring A zu übertreffen . Wenn die Größe von A viel größer wird und G sehr dünn ist, könnte es sich auszahlen. In jedem Fall werden die möglichen Aktualisierungen und Annäherungen ausführlich behandelt. Können diagonale und festsymmetrische lineare Systeme nach der Vorberechnung in quadratischer Zeit gelöst werden? . n104nnz(G)AAG
Jed Brown
5
Jed, ich denke, Sie sollten Ihren Kommentar zu einer Antwort hier fördern.
Michael Grant

Antworten:

3

LDLT

nnz(G)

O(nnz(G)nnz(L))nnz(L)A

Das Paket kann hier heruntergeladen werden

Im Folgenden sind einige Anmerkungen des Paketinhabers (Prof. Tim Davis) aufgeführt:

API:

LD = ldlrowmod (LD, k) löscht Zeile / Spalte k, indem A (:, k) und A (k, :) auf die k-te Zeile / Spalte der Identität gesetzt werden.

LD = ldlrowmod (LD, k, C) ersetzt die k-te Zeile / Spalte von A (die die k-te Zeile / Spalte der Identität sein muss) durch die dünn besetzte Spalte C.

Komplexität:

O(nnz(L))nnz(L)O(n)O(n)

Reduzierende Permutation füllen:

LDLTLDLTPAPTL

Yuval Atzmon
quelle