[Haskell-cafe] A Performance Puzzle
dominic at steinitz.org
dominic at steinitz.org
Sat Aug 4 09:02:43 UTC 2018
> Something Haskell has lacked for a long time is a good medium-duty
> linear system solver based on the LU decomposition. There are bindings
> to the usual C/Fortran libraries, but not one in pure Haskell. (An
> example "LU factorization" routine that does not do partial pivoting has
> been around for years, but lacking pivoting it can fail unexpectedly on
> well-conditioned inputs. Another Haskell LU decomposition using partial
> pivoting is around, but it uses an inefficient representation of the
> pivot matrix, so it's not suited to solving systems of more than 100 x
> 100, say.)
>
> By medium duty I mean a linear system solver that can handle systems of
> (1000s) x (1000s) and uses Crout's efficient in-place algorithm. In
> short, a program does everything short of exploiting SIMD vector
> instructions for solving small subproblems.
>
> Instead of complaining about this, I have written a little library that
> implements this. It contains an LU factorization function and an LU
> system solver. The LU factorization also returns the parity of the
> pivots ( = (-1)^(number of row swaps) ) so it can be used to calculate
> determinants. I used Gustavson's recursive (imperative) version of
> Crout's method. The implementation is quite simple and deserves to be
> better known by people using functional languages to do numeric work.
> The library can be downloaded from GitHub:
> https://github.com/gwright83/luSolve <https://github.com/gwright83/luSolve>
Great news :)
Dominic Steinitz
dominic at steinitz.org
http://idontgetoutmuch.wordpress.com
Twitter: @idontgetoutmuch
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20180804/7807ae75/attachment.html>
More information about the Haskell-Cafe
mailing list