DotNumerics, AlgLib, dnAnalytics, Math.net, F # для Numerics, Mtxvec?

Я искал Google и Qaru как сумасшедшие в течение нескольких дней и еще не нашел какую-либо последнюю, полностью релевантную информацию, чтобы ответить на следующий вопрос: Каковы лучшие математические библиотеки С#/F #/.NET(в частности, те, которые обертывают или реализуют те же функции, что и Lapack и т.д.)?

Один из лучших сообщений о переполнении стека, который я видел, был: https://stackoverflow.com/info/3227647/open-source-math-library-for-f

Причина, по которой эта публикация и другие предыдущие сообщения не полностью отвечали на мой вопрос, заключалась в том, что систематическое сравнение опыта пользователей с различными библиотеками не предоставлялось.

Мне интересно, насколько полно следующие библиотеки (в реальном использовании) реализуют Lapack (или широкий набор эквивалентной линейной алгебры функциональности); и, Им интересно об их работе относительно друг друга, особенно на очень больших матрицах. Кроме того, Id нравится слышать о других событиях, использующих различные библиотеки: трудности, простоту использования и т.д.

Ниже приведен полный список "бесплатных" /открытых источников/доступных математических библиотек .NET/F #/С#, которые, насколько я знаю, имеют набор функций линейной алгебры. Id глубоко оценил это, если сообщество здесь, в Stack Overflow, обловилось бы с любым опытом, который у них есть со следующими библиотеками:

Мне интересно F # для Numerics (так как Im работает с F #), но Im с трудом выясняет сильные и слабые стороны различных библиотек. Как, какие функции отсутствуют или включены в различные библиотеки, и насколько они легко используются и насколько хорошо они выполняются.

DotNumerics кажется всеобъемлющей реализацией Lapack в С#, но я не могу найти кого-нибудь, кто поделился с ним своим опытом. Math.NET кажется, что в конечном итоге это может быть отличная, всеобъемлющая математическая библиотека для .NET, но ее трудно сказать, насколько активен проект, и кажется, что он очень сильно влияет на текущую стадию. Alglib говорят о том, что один или два раза были твердыми, но Id любят больше об этом относиться к другим. Мне нравится идея поддержки родной библиотеки чисел F #, но я не уверен, насколько привержен разработчик (Flying Frog Consultancy) - поддерживать и разрабатывать F # для Numerics... и какую функциональность они планируют включить в свою версию 1.0 и какова их целевая дата для выпуска 1.0.

Ответ 1

Одна распространенная ошибка выбора математической библиотеки - это то, что мы надеемся, что существует математическая библиотека для всего.

Прежде чем найти библиотеку, вы должны сначала спросить "какую математическую библиотеку я хочу?". Тогда у вас будет список критериев, таких как открытый исходный код или нет, высокая производительность или нет, портативный или нет, простой в использовании или нет.

Ниже приведены мои комментарии к библиотекам в вашем списке (последние два я не использовал):

1) DotNumerics

(http://www.dotnumerics.com/)

Они используют переводчик fortran2С#, который переводит код процедур Лапака в классы С#. Удобные обертки С# написаны для необработанных классов Lapack.

2) Alglib (http://www.alglib.net/)

Эта библиотека доступна на нескольких языках, таких как delphi, 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/ Это решение для .Net. Они PInvoke к Lapack dll (например, неоптимизированный lapack в netlib, оптимизированные версии от AMD и Intel.)

2. математический провайдер в F #. прочитайте мой ответ на этот вопрос. Так как исходный код F # теперь открыт. Я могу пересмотреть библиотеку и выпустить свои обновления :)

Обычно вам не нужна большая математическая библиотека. Вам просто нужна некоторая функциональность, например, если вам нужна быстрая процедура умножения матриц, использование PInovke для DLL BLAS, оптимизированной для платформы, является самым простым способом. Если вам нужно сделать учебное математическое программное обеспечение для детей, то качества Math.net достаточно. Если вы работаете в компании и разрабатываете надежные математические компоненты, то почему бы не использовать коммерческий компонент, поддерживаемый высококачественной командой?

Найти идеальную математическую библиотеку сложно. Но найти библиотечное решение вашей проблемы обычно легко.

Ответ 2

F # для Numerics - продукт моей компании, написанный на 100% F #. Наш акцент делается на общих методах (все от БПФ до генерации случайных чисел), а не в конкретной линейной алгебре, хотя предоставляются основные процедуры линейной алгебры (Cholesky, LU, QR, SVD по различным типам матриц/элементов), и нас особенно интересует простота используйте из F #.

Если вы после полной ширины LAPACK, то мои рекомендации Alglib, если вы находитесь в бюджете или Extreme Optimization, если вы можете себе это позволить. Alglib - это полностью управляемый код с API-интерфейсом "ловкий", поэтому он довольно медленный и громоздкий для использования. Экстремальная оптимизация - это более удобный API-интерфейс, включающий Intel MKL и некоторые дополнительные процедуры, поэтому его проще в использовании и намного быстрее запускать.

Я должен предупредить вас, что общее качество библиотек .NET(бесплатная, коммерческая и даже сама инфраструктура) сравнительно невелико, если вы исходите из фона с открытым исходным кодом. Я попробовал многие из других библиотек, которые вы упомянули, и не впечатлил их.

Ответ 3

Я также предлагаю просмотреть новую .net-цифровую библиотеку под названием FinMath, которую я использовал в своем развитии. Он предоставляет простые в использовании оболочки класса .net для большого количества библиотеки MKL (Библиотека математического ядра Intel, на которой она основана), таких как линейная алгебра (BLAS и LAPACK), статистика и БПФ. Кроме того, он содержит ряд передовых методов, таких как линейный и квадратичный программный решатель, кластерный анализ и другие. Он также включает в себя различные оптимизации .net для собственного c-маршалинга, что приводит к высокой производительности и простоте использования решения для единой DLL.

Но, к сожалению, он не является открытым исходным кодом, а не бесплатным и, в отличие от LAPACK, большинство методов поддерживает только значения двойной точности с плавающей запятой. И для некоторых редко используемых методов LAPACK обертка не предоставляется.