I'm starting my MSFE program this fall. Since C++ is heavily used on Wall Street, I have decided to take this summer to build a significant numerical library for financial related applications. Right now I am working with Quantlib and GSL to see how numerical routines are coded in C-style languages, but I am hoping to see a much broader code base as my project develops. I've come across several other numerical libraries, but I'm really not capable of judging yet what is considered to be a good library. I was hoping HN could point me to some well-constructed numerical libraries, hopefully coded in C++. I'll share my code when I get a significant amount of work done.<p>I thank any posters ahead of time.
I'm doing graphics research, and the numerical libraries is probably slightly different, but the ones I've found useful are:
<a href="http://math.nist.gov/tnt/" rel="nofollow">http://math.nist.gov/tnt/</a>
<a href="http://eigen.tuxfamily.org/index.php?title=Main_Page" rel="nofollow">http://eigen.tuxfamily.org/index.php?title=Main_Page</a>
<a href="http://www.cgal.org/" rel="nofollow">http://www.cgal.org/</a><p>Also, I can't recommend "Numerical Recipies in C++" enough. This is a great book if you're not a wizard already, although the seriously good numerical mathematicians complain that it doesn't necessarily show you the absolute best way to do everthing. Its a great learning and example-code resource though! <a href="http://www.amazon.com/Numerical-Recipes-C-Scientific-Computing/dp/0521750334/ref=sr_1_2?ie=UTF8&s=books&qid=1241965399&sr=8-2" rel="nofollow">http://www.amazon.com/Numerical-Recipes-C-Scientific-Computi...</a>
Boost.uBlas: <a href="http://www.boost.org/doc/libs/1_39_0/libs/numeric/ublas/doc/index.htm" rel="nofollow">http://www.boost.org/doc/libs/1_39_0/libs/numeric/ublas/doc/...</a><p>A good C++ library for high performance computing is going to be more than just C-style functions wrapped in a class. Read the paper on Expression Templates by Todd Veldhuizen: <a href="http://ubiety.uwaterloo.ca/~tveldhui/papers/Expression-Templates/exprtmpl.html" rel="nofollow">http://ubiety.uwaterloo.ca/~tveldhui/papers/Expression-Templ...</a>
<a href="http://www.research.att.com/~bs/C++.html#libraries" rel="nofollow">http://www.research.att.com/~bs/C++.html#libraries</a><p>Also, __the__ templates books is very useful for several tricks for squeezing performance: <a href="http://www.josuttis.com/tmplbook/" rel="nofollow">http://www.josuttis.com/tmplbook/</a><p>HTH
The Intel Math Kernel Library is decent, and very fast. It has disadvantages - not optimized for AMD processors, not free (but the student version is cheap, and the free trial does not really expire).
The best modern C++ numerical library I came across is Eigen: <a href="http://eigen.tuxfamily.org/index.php?title=Main_Page" rel="nofollow">http://eigen.tuxfamily.org/index.php?title=Main_Page</a>
The best advice I can give you is: read Nuclear Phynance. It's a truly great forum for practitioners:<p><a href="http://www.nuclearphynance.com" rel="nofollow">http://www.nuclearphynance.com</a><p>There you can read a lot about implementing numerical software in the "real world". My perception is that C# is starting to take C++'s place. But, then, it's just a perception. Moreover, take a look at LAPACK, LAPACK++, BLAS, and the like...