Одной из распространенных ошибок при выборе математической библиотеки является то, что мы надеемся, что существует математическая библиотека для всего.
Прежде чем найти библиотеку, вы должны сначала спросить «какую библиотеку математики я хочу?».Тогда у вас будет список критериев, таких как открытый исходный код или нет, высокая производительность или нет, портативный или нет, простой в использовании или нет.
Ниже приведены мои комментарии к библиотекам в вашем списке (я не использовал последние два):
1) DotNumerics
(http://www.dotnumerics.com/)
Они используют переводчик fortran2C #, который переводит код процедур Лапака в классы C #. Удобные в использовании оболочки C # написаны для необработанных классов Лапака.
2) Alglib (http://www.alglib.net/)
Эта библиотека доступна на нескольких языках, таких как delphi, c ++ и c #. Я считаю, что она имеет более длинную историю, чем любые другие библиотеки, перечисленные вами.
Большинство функций переведены с LapackИ его интерфейс не так удобен для пользователя. (Но у вас есть гибкость интерфейса в стиле Lapack.) Использование интерфейса в стиле lapack означает, что вам нужно больше узнать о матрице и ее операциях.
3) dnAnalytics (http://dnanalytics.codeplex.com/)
Эта библиотека в настоящее время объединяется с Math.Net. Похоже, что объединение еще не завершено. Некоторые функции в dnA все еще недоступны в Math.Net.
4) Math.NET (http://www.mathdotnet.com/) Его реализация с нуля, то есть это не прямой перевод с Lapack.Они стремятся предоставить чисто управляемую библиотеку для платформы .Net.Это означает, что простота использования и мобильность являются двумя основными целями.Одна проблема заключается в том, является ли их собственная реализация правильной или нет.Хорошо, что эта библиотека переносима в том смысле, что вы можете использовать ее на Mono, XNA, Windows Mobile Phone без особых усилий.
Вышеуказанные библиотеки не фокусируются на F #.Однако один из членов команды в Math.Net работает в MS Research Cambridge и является экспертом F #.Как сказал Cuda, они разработают интерфейс F # для библиотеки.Также они предоставят родные обертки.Но, может быть, вы будете ждать долго, дольше, чем «несколько месяцев»:)
Из-за высокой производительности вышеупомянутые библиотеки не предоставляют встроенные оболочки (по крайней мере, сейчас).Если вам нужна собственная производительность + .Net, вам лучше использовать коммерческую библиотеку.Существует несколько решений с открытым исходным кодом:
1.http://ilnumerics.net/ Это решение, похожее на numpy, для .Net.Они PInvoke to Lapack dll (например, неоптимизированный lapack в netlib, оптимизированные версии от AMD и Intel.)
2.математический провайдер в F #. прочитайте мой ответ в этот вопрос .Так как исходный код F # теперь открыт.Я могу пересмотреть библиотеку и выпустить свои обновления:)
Обычно вам не нужна большая математическая библиотека.Вам просто нужна некоторая функциональность, например, если вам нужна быстрая процедура умножения матриц, использование PInovke для DLL BLAS, оптимизированной для платформы, является самым простым способом.Если вам нужно сделать учебное математическое программное обеспечение для детей, то качества Math.net достаточно.Если вы работаете в компании и разрабатываете надежные математические компоненты, то почему бы не использовать коммерческий компонент, поддерживаемый высококачественной командой?
Найти идеальную математическую библиотеку сложно.Но найти библиотечное решение вашей проблемы обычно легко.