Ich arbeite gerade an einer C ++ - basierten Bibliothek für große, spärliche lineare Algebra-Probleme (ja, ich weiß, dass es viele solcher Bibliotheken gibt, aber ich leite meine eigenen, um mehr über iterative Solver, spärliche Speichercontainer usw. zu erfahren). .).
Ich bin soweit, dass ich meine Solver in anderen meiner Programmierprojekte verwende und die Solver gegen Probleme, die nicht meine eigenen sind, testen möchte. In erster Linie suche ich nach symmetrischen dünn besetzten Systemen, die positiv definit sind. Ich habe mehrere Quellen für solche Systemmatrizen gefunden, wie zum Beispiel:
Matrix-Markt UF Sparse Matrix Collection
Davon abgesehen habe ich noch keine Quellen für gute Testmatrizen gefunden, die die gesamte Systemmatrix und RHS enthalten. Dies wäre großartig, um die Ergebnisse zu überprüfen. Irgendwelche Tipps, wo ich solche kompletten Systeme finden kann oder was ich tun könnte, um ein "gutes" RHS für die Systemmatrizen zu generieren, die ich online bekommen kann? Ich fülle gerade eine Matrix mit zufälligen Werten oder allen Einsen, aber vermute, dass dies nicht unbedingt der beste Weg ist.
Ich würde vorschlagen, einen rechtsseitigen Vektor zu verwenden, der von einer vordefinierten "Ziel" -Lösung x:
erhalten wird %Vor%Dann haben Sie eine Ziellösung, x, und eine resultierende Lösung, x, aus dem Solver. Dies bedeutet, dass Sie den Fehler (Unterschied des Ziels und der resultierenden Lösungen) sowie die Residuen (A * x - b) vergleichen können.
Beachten Sie, dass Sie für die sorgfältige Auswertung eines iterativen Solver auch überlegen müssen, was Sie für das anfängliche x verwenden sollen.
Die Online-Sammlungen von Matrizen enthalten hauptsächlich die linksseitige Matrix, aber einige enthalten rechte Seiten und einige auch Lösungsvektoren.:
Übrigens, für die UF-Sparse-Matrix-Sammlung würde ich stattdessen diesen Link vorschlagen:
es wäre gut zu spezifizieren, welche Art von Problemen lösen Sie ... Verschiedene Probleme erfordern unterschiedliche RHS, um die Gültigkeit zu überprüfen ..... was ich vorschlagen werde, ist ein Beispielcode von einigen Projekten wie DUNE Numerics (ich arbeite gerade daran), FENICS , deal.ii , die bereits die Solver verwenden, um Matrizen zu lösen ... im Allgemeinen haben sie einige Funktionen, um Ihre Matrix in irgendeiner Art von Datei auszugeben (DUNE Numerics hat Funktionalität zu Ausgangsmatrizen und RHS in Matlab-konformen Dateien).
Dies können Sie dann Ihren Lösern zuführen. und verwenden Sie dann wieder ihre Bibliotheksfunktionalität, um Ausgabedaten zu erstellen (Wie DUNE Numerics verwendet ein VTK-Format) ... Das heißt, Sie werden Daten mit leistungsfähigen Tools analysieren .....
müssen Sie vielleicht etwas über das Kompilieren und Verwenden dieser Bibliotheken lernen ... aber es ist nicht viel ... und ich glaube, dass die Funktionalität, die du bekommst, die investierte Zeit wert wäre ...
Ich schätze, selbst ein einziges wohldefiniertes und einigermaßen komplexes Problem sollte gut genug sein, um Ihre Bibliotheken zu testen ... naja, eigentlich zwei eine für Ax = B Probleme und eine andere für Ax = cBx (Eigenwertprobleme) ....
Tags und Links c++ linear-algebra iteration matrix solver