One common mistake in choosing a math library is that we hope that there is a math library for everything.
Before you find a library, you must first ask, "What kind of math library do I want?" Then you will have a list of criteria, such as open source or not, high performance or not, portable or not, easy to use or not.
Below are my comments on the libraries on your list (the last two I have not used):
1) DotNumerics
( http://www.dotnumerics.com/ )
They use the fortran2C # translator, which translates the Lapak procedure code into C # classes. C # handy wrappers are written for raw Lapack classes.
2) Alglib ( http://www.alglib.net/ )
This library is available in several languages, such as delphi, c ++ and C #. I believe that it has a longer history than any other libraries you have listed.
Most of the features are translated from Lapack. And its interface is not so user friendly. (But you have the flexibility of a Lapack-style interface.) Using a Lapack-style interface means you need to learn more about the matrix and its operations.
3) dnAnalytics ( http://dnanalytics.codeplex.com/ )
This library now merges with Math.Net. It seems the merger is not over yet. Some features in dnA are still not available in Math.Net.
4) Math.NET ( http://www.mathdotnet.com/ ). Its implementation from scratch, that is, it is not a direct translation from Lapack. They strive to provide a cleanly managed library for the .Net platform. This means that ease of use and mobility are two main goals. One problem is whether their own implementation is correct or not. It's good that this library is portable in the sense that you can use it on Mono, XNA, Windows Mobile Phone without much effort.
The above libraries do not focus on F #. However, one of the team members at Math.Net works at MS Research Cambridge and is an F # expert. As Cuda said, they will develop the F # interface for the library. They will also provide native wrappers. But maybe you will wait a long time, longer than "a few months" :)
Due to their high performance, the above libraries do not provide built-in wrappers (at least for now). If you need your own + .Net performance, you'd better use a commercial library. There are several open source solutions:
1. http://ilnumerics.net/ This is a solution for .Net. They are PInvoke to Lapack dll (for example, non-optimized lapack in netlib, optimized versions from AMD and Intel.)
2. The math provider in F #. read my answer to this question . Since the source code F # is now open. I can review the library and release my updates :)
Usually you do not need a large math library. You just need some functionality, for example, if you need a quick matrix multiplication procedure, using PInovke for the BLAS DLL, optimized for the platform, is the easiest way. If you need to make educational mathematical software for children, then the quality of Math.net is enough. If you work in a company and develop reliable mathematical components, then why not use a commercial component supported by a high-quality team?
Finding the perfect math library is hard. But finding a library solution to your problem is usually easy.