We have quite a number of math libraries in 3rdparty packages now. We should focus down and choose one or a few. As part of cleaning up 3rd party packages ROS/ThirdPartyDependencies
Options include:
uBlas - (in boost), but only provides BLAS no higher level functions http://www.boost.org/doc/libs/1_37_0/libs/numeric/ublas/doc/overview.htm
- Conclusion: not complete enough to recommend usage.
 
newmat10 - an option (though we've had problems with svd) http://www.robertnz.net/nm10.htm
- Easy to use, but not very efficient
 - SVD apparently doesn't converge properly
 - Conclusion: throw it out
 
lapackpp - a c++ wrapper around LAPACK http://lapackpp.sourceforge.net/ (branched from http://math.nist.gov/lapack++/ ) http://www.netlib.org/lapack/
- Incomplete, will require pushing back patches to expose everything we need.
 - lapack is the standard, with which more people are familiar
 
eigen2 - used in the vision packages http://eigen.tuxfamily.org/index.php?title=Main_Page
- Not as complete as lapack
 - Includes most decompositions plus regressions
 - Under active development, responsive community
 - Comparable performance to Intel MKL and specialized BLAS implementations
 much nicer interface than lapack
- sparse matrix operations are currently experimental
 
- openCV 
- Has some stuff, but will likely move to some BLAS implementation
 - Conclusion: don't use it.
 
 - refblas 
- Not easy to use directly
 - Free implementations are generally not fast.
 - No reason to use refblas
 
 - atlas, automatically tuned BLAS 
- Should be faster than refblas
 - Different versions available depending on SSE level -- linker problems.
 - Implements part of LAPACK (?)
 
 - BFL has wrappers for uBLAS, NEWMAT, and liblti
 
Conclusions
- Recommend eigen2 for all new code, with uBLAS to fill in holes (e.g., sparse matrices)
 - No NEWMAT
 - No OpenCV
 - No refblas
 - No GSL CBLAS
 - No lapackcpp
 - Use atlas and/or lapack for existing code, but prefer to switch.