Gibt es ein Quad-Double-Arithmetik-Sparse-Matrix-Paket?


10

Ich arbeite an einem schlecht konditionierten großen, spärlichen linearen Gleichungssystem. Ich möchte Doppel-Doppel-Arithmetik oder Quad-Doppel-Arithmetik verwenden, um sie zu lösen. Ich weiß, dass es ein Paket namens MPACK gibt, das von Nakata, Maho, entwickelt wurde und numerische lineare algebraische Berechnungen unter Quad-Double-Arithmetik durchführen kann. Es ist jedoch für eine dichte Matrix ausgelegt, nicht für eine spärliche Matrix. Wissen Sie, ob es ein Quad-Double-Arithmetik-Sparse-Matrix-Paket gibt?


Mit welcher Art von Matrizen arbeiten Sie? Ist es symmetrisch, hermitisch, positiv definitiv? Möchten Sie eine spärliche LU erstellen oder iterative Methoden verwenden?
— Victor Liu

Antworten:


3

Ab Version 3.2 unterstützt PETSc spärliche Berechnungen mit vierfacher Genauigkeit unter gcc / gfortran 4.6 und höher.

Sie benötigen BLAS und LAPACK mit vierfacher Genauigkeit, die PETSc Ihnen (zusammen mit der Quad-Unterstützung) mit dem folgenden (teilweisen) Konfigurationsbefehl zur Verfügung stellen kann:

./configure --with-precision=__float128 --download-f2cblaslapack

Weitere Informationen finden Sie in den FAQ .

Außerdem stimme ich nOOb zu , wenn möglich, versuchen Sie, das System zu regulieren, bevor Sie auf Quad-Präzision umschalten.


1
Dies ist Quad-Genauigkeit (128-Bit-Real), nicht Quad-Double (256-Bit-Real). Das heißt, Quad-Präzision ist normalerweise ausreichend, um Stabilitätsprobleme zu verstehen, die bei doppelter Präzision auftreten. In der Regel möchten Sie das System skalieren und diskretisieren, sodass doppelte Präzision für die Produktion ausreicht.
— Jed Brown

2

Schlecht konditionierte Systeme lassen sich besser durch Regularisierung lösen als durch Erhöhung der numerischen Genauigkeit. Suchen Sie nach "Regularisierung schlecht gestellt" für die blutigen Details.


2

Ich könnte die Trilinos-Bibliothek ausprobieren. Sie haben Sparse-Matrix-Bibliotheken unter Tpetra (das Epetra, ihre ursprüngliche Sparse-Matrix-Bibliothek, ersetzen soll) als Vorlage verwendet. Sie können Double, Complex, Quad usw. vorlegen, und sie haben möglicherweise die größte Auswahl an Solvern (sowohl direkt als auch iterativ) neben PETSc.

Bearbeiten: Nach dem Lesen der Kommentare scheint die unmittelbare Nützlichkeit von Tpetra ein wenig fraglich in Bezug auf Quad-Präzision zu sein ...


Die meisten Löser arbeiten leider noch nicht mit Tpetra :-(
— Wolfgang Bangerth

Das ist bedauerlich. Ich war hoffnungsvoll, aber nicht sicher, wie weit die Entwicklung von Tpetra fortgeschritten ist (daher das "soll Epetra ersetzen": P). Ich dachte zumindest, dass die Belos-Bibliothek (dh Trilinos-Löser, die nicht auf Wrappern für Codes von Drittanbietern basieren) Tpetra unterstützt?
— Jesse Chan

Ich denke es gibt einen Belos2. Mit Sicherheit setzt das Trilinos-Projekt seine Ressourcen hinter Tpetra und es wird in Zukunft das Standardpaket sein. Ich denke, sie sind noch nicht ganz da.
— Wolfgang Bangerth

Mir ist nicht einmal bewusst, __float128dass ich von Tpetra unterstützt werde, geschweige denn von Quad-Double. Tpetra ist nicht eigenständig und kein All-Header, und selbst wenn es so wäre, std::complexfunktionieren Dinge wie nur mit floatund double.
— Jed Brown

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.