Gibt es ein Paket zur Durchführung von Sparse Linear Algebra-Berechnungen, vielleicht basierend auf schnellen und effizienten C-Bibliotheken? Ich habe auf Hackage gesucht, aber ich habe nichts gefunden: hmatrix, die GSL, BLAS und LAPACK verwendet, ist großartig, aber scheint keine speziellen Algorithmen zu enthalten, um lineare Systeme und Eigenwerte/Vektoren mit spärlichen Matrizen zu lösen . Was ich gerne finden würde, ist es ähnlich dem Sparse.linalg Modul in Scipy. Danke!Irgendein Sparse Linear Algebra-Paket in Haskell?
Antwort
Soweit ich weiß, gibt es noch kein solches Paket.
Es gab einen Artikel R. L. Winwright und M. E. Sexton. Eine Studie von spärlichen Matrixdarstellungen zur Lösung linearer Systeme in einer funktionalen Sprache. J. Functional Programming, 2 (1): 61-72, Jan. 1992., wo sie Quad-Tree-, Binary-Tree- und Run-length-Encoding-Arrays mit spärlicher Matrix in Miranda verglichen. Quad-Bäume waren bei der CG-Methode überlegen, und die Lauflängencodierung lief mit SOR gut ab.
Es gab eine Implementierung der FEM in Haskell 1993, Some issues in a functional implementation of a finite element algorithm. Sie benutzten auch Quad-Bäume. Die Leistung war nicht herausragend, aber es war lange her ... Ich gehe davon aus, dass Haskell heute bessere Leistungen bringen kann. Es gibt auch neue Array-Bibliotheken zu verwenden, die bessere Darstellungen der dünn besetzten Matrizen ergeben können. Heute haben wir IntMap
, Vector
und sogar Repa
.
Eine Bibliothek der Sparse Solver in Haskell (oder Bindungen zu C/Fortran Solver) muss noch geschrieben werden.
scipy.sparse scheint viele zu bewirtschaften schweres Herausheben zu superLU, das direkt zu binden sein sollte: http://crd.lbl.gov/~xiaoye/SuperLU/, aber man braucht immer noch Code, um die spärlichen Matrixdarstellungen zu erstellen. – sclv
Ja. Es gibt auch eine UMFPACK-Bibliothek mit direkten Lösern http://www.cise.ufl.edu/research/sparse/umfpack/. Es sollte nicht zu schwierig sein, mit beiden zusammenzuarbeiten. Und es gibt auch iterative Solver, die oft weniger Speicher benötigen. Wir können entweder mit vorhandenen Bibliotheken arbeiten oder sie von Grund auf neu implementieren. Ich bin mir nicht sicher, was sich schneller drehen könnte. Auch hier gibt es TAUCS http://www.tau.ac.il/~stoledo/taucs/ und LASPACK http://www.mgnet.org/mgnet/Codes/laspack/ (nur sequentiell) und PETSc http: // www.mcs.anl.gov/petsc/petsc-2/ (riesig). – sastanin
SciPy.Sparse verwendet Fortran-Implementierungen der iterativen Methoden von http://www.netlib.org/templates/ – sastanin
jemand in einer Antwort wies darauf hin, die gut aussah und ich weiß nicht, warum ihre Antwort gelöscht wurde https://github.com/laughedelic/sparse-lin-alg – sclv