Sparse Linear Solver für viele rechte Seiten


12

Ich muss das gleiche dünne lineare System (300x300 bis 1000x1000) mit vielen rechten Seiten (300 bis 1000) lösen. Zusätzlich zu diesem ersten Problem möchte ich auch verschiedene Systeme lösen, aber mit denselben Nicht-Null-Elementen (nur unterschiedlichen Werten), das sind viele spärliche Systeme mit konstantem Sparsity-Muster. Meine Matrizen sind unbestimmt.

Die Leistung der Faktorisierung und Initialisierung ist nicht wichtig, die Leistung der Lösungsstufe jedoch. Derzeit denke ich über PaStiX oder Umfpack nach und werde wahrscheinlich mit Petsc (das beide Löser unterstützt) herumspielen. Gibt es Bibliotheken, die meine spezifischen Bedürfnisse (Vektorisierung, Multithreading) ausnutzen können, oder sollte ich mich auf allgemeine Löser verlassen, und Vielleicht etwas modifizieren für meine Bedürfnisse?

Was ist, wenn die dünne Matrix größer ist, bis zu ?106×106

Antworten:


10

Ohne die Diskussion darüber, ob direkte oder iterative Löser verwendet werden sollen, aufzugreifen, möchte ich nur zwei Punkte hinzufügen:

  1. Es gibt Krylov-Methoden für Systeme mit mehreren rechten Seiten (sogenannte Block-Krylov-Methoden ). Als zusätzlichen Vorteil haben diese häufig eine schnellere Konvergenz als Standard-Krylov-Methoden, da der Krylov-Raum aus einer größeren Sammlung von Vektoren aufgebaut ist. Siehe Dianne P. O'Leary, Der Blockkonjugationsgradientenalgorithmus und verwandte Methoden . Lineare Algebra und ihre Anwendungen 29 (1980), Seiten 239-322. und Martin H. Gutknecht, Block-Krylov-Raummethoden für lineare Systeme mit mehreren rechten Seiten: Eine Einführung (2007).

  2. Wenn Sie verschiedene Matrizen mit demselben Sparsity-Muster haben, können Sie eine symbolische Faktorisierung für die erste Matrix vorberechnen, die bei der Berechnung der numerischen Faktorisierung für diese und die nachfolgenden Matrizen wiederverwendet werden kann. (In UMFPACK können Sie dies mithilfe von umfpack di symbolicund Übergeben des Ergebnisses an ausführen umfpack_di_numeric.)


9

O(N)


4
O(N2)O(N4/3)O(N4/3)N

3
O(N)O(N4/3)

2
105n<300k

3

Wenn Sie von "denselben Nicht-Null-Elementen (nur unterschiedlichen Werten)" sprechen, sind Sie in Ihrer Erklärung des Problems nicht ganz klar. Wollen Sie damit sagen, dass die Matrix ein konstantes Sparsity-Muster aufweist, sich aber die tatsächlichen Werte ändern? Oder sagen Sie, dass die Matrix tatsächlich konstant ist?

PA=LUO(n2)

Für mehrere rechte Seiten und Gleichungssysteme dieser Größe lohnen sich iterative Methoden in der Regel nicht.

Alle Pakete, die Sie erwähnt haben, bieten direkte Faktorisierungsmethoden (obwohl PetSc hauptsächlich für seine iterativen Löser bekannt ist). Ihre Systeme sind jedoch so klein, dass es unwahrscheinlich ist, dass Sie in einer verteilten Speicherumgebung erhebliche parallele Beschleunigungen erzielen können.

Ich würde vorschlagen, Umfpack für diesen Job zu verwenden - PaStix und PetSc sind übertrieben.


Danke für deine Antwort. Zur Verdeutlichung: Ich habe zuerst nach einer einzelnen Matrix mit vielen rechten Seiten gefragt, und dann ist ein anderes Problem eine Sammlung von Matrizen mit dem gleichen Sparsity-Muster, aber die Werte ändern sich. Jede von ihnen muss für viele rhs gelöst werden. Nebenfrage: Was ist, wenn die dünne Matrix jetzt 10 ^ 5x10 ^ 5 bis 10 ^ 6x10 ^ 6 ist?
Nat Chouf

2
105

Die Verwendung einer iterativen Methode für Ihre größeren Systeme mit nur einer einzigen rechten Seite kann sinnvoll sein, insbesondere wenn Sie keine sehr genauen Lösungen benötigen und wenn Sie einen wirksamen Vorkonditionierer finden oder Ihre Systeme bereits gut konditioniert sind. Wenn Ihre Systeme jedoch schlecht konditioniert sind, Sie genaue Lösungen benötigen und keinen guten Vorkonditionierer finden, sind Sie mit der direkten Faktorisierung wahrscheinlich noch besser dran.
Brian Borchers

N106
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.