2010-10-22 12 views
11

Esiste un pacchetto per eseguire calcoli di algebra lineare sparsa, magari basato su librerie C veloci ed efficienti? Ho cercato su Hackage ma non ho trovato nulla al riguardo: hmatrix, che usa GSL, BLAS e LAPACK, è ottimo, ma non sembra includere algoritmi speciali per risolvere sistemi lineari e problemi di autovalori/vettori con matrici sparse . Quello che mi piacerebbe trovare, è qualcosa di simile al modulo sparse.linalg in scipy. Grazie!Qualsiasi pacchetto di Algebra lineare sparsa in Haskell?

+1

qualcuno in una risposta ha sottolineato questo, che sembrava soddisfacente e non so perché la loro risposta è stata cancellata https://github.com/laughedelic/sparse-lin-alg – sclv

risposta

7

Per quanto ne so, non esiste ancora un pacchetto simile.

C'era un articolo R. L. Winwright e M. E. Sexton. Uno studio di rappresentazioni sparse di matrici per risolvere sistemi lineari in un linguaggio funzionale. J. Functional Programming, 2 (1): 61-72, Jan. 1992., dove hanno confrontato rappresentazioni sparse di matrici quadruple, ad albero binario e codifica run-length in Miranda. I quad erano superiour nel metodo CG e la codifica run-length andava bene con SOR.

C'è stata un'implementazione del FEM in Haskell nel 1993, Some issues in a functional implementation of a finite element algorithm. Hanno usato anche quad-tree. Le prestazioni ottenute non sono state stellari, ma è stato molto tempo fa ... Mi aspetto che oggi Haskell possa fare meglio. Ci sono anche nuove librerie di array da usare, che possono dare migliori rappresentazioni delle matrici sparse. Oggi abbiamo IntMap, Vector e anche Repa.

Una libreria di risolutori sparsi in Haskell (o binding a solutori C/Fortran) deve ancora essere scritta.

+0

scipy.sparse sembra coltivare molte delle sollevare pesantemente verso superLU, che dovrebbe essere straightfowarard per legare: http://crd.lbl.gov/~xiaoye/SuperLU/, ma si ha ancora bisogno del codice per creare le rappresentazioni di matrice sparse per cominciare. – sclv

+1

Sì. Esiste anche una libreria UMFPACK di risolutori diretti http://www.cise.ufl.edu/research/sparse/umfpack/. Non sarà troppo difficile interfacciarsi con nessuno dei due. E ci sono anche solutori iterativi che spesso richiedono meno memoria da eseguire. Possiamo scegliere di interfacciarci con le librerie esistenti o di implementarle da zero. Non sono sicuro che possa girare più velocemente. Di nuovo, ci sono TAUCS http://www.tau.ac.il/~stoledo/taucs/ e LASPACK http://www.mgnet.org/mgnet/Codes/laspack/ (solo sequenziale) e PETSc http: // www.mcs.anl.gov/petsc/petsc-2/ (enorme). – sastanin

+0

SciPy.Sparse utilizza le implementazioni di Fortran dei metodi iterativi da http://www.netlib.org/templates/ – sastanin

Problemi correlati