symbolics net mathnet library .net math f# libraries linear-algebra

mathnet - DotNumerics, AlgLib, dnAnalytics, Math.net, F#for Numerics, Mtxvec?



math net symbolics (3)

He estado buscando en Google y en Stack Overflow como locos durante días y aún no he encontrado ninguna información reciente y completamente relevante para responder la siguiente pregunta: ¿Cuáles son las mejores bibliotecas matemáticas de C # / F # / .NET (específicamente, las que se ajustan o implementan)? la misma funcionalidad que Lapack, etc.)?

Una de las mejores publicaciones sobre desbordamiento de pila que vi fue: https://stackoverflow.com/questions/3227647/open-source-math-library-for-f

La razón por la que esa publicación y otras publicaciones anteriores no respondieron lo suficiente a mi pregunta fue que no se proporcionó una comparación sistemática de las experiencias de los usuarios con varias bibliotecas.

Estoy interesado en cómo las siguientes bibliotecas (en uso en el mundo real) implementan Lapack (o un amplio conjunto de álgebra lineal equivalente de funcionalidad); y tengo curiosidad por su rendimiento en relación con los demás, particularmente en matrices muy grandes. Además, me gustaría conocer las experiencias de otros usuarios utilizando las distintas bibliotecas: dificultades, facilidad de uso, etc.

A continuación se muestra una lista completa de las bibliotecas de matemáticas "gratuitas" / opensource / affordable .NET / F # / C # que, por lo que sé, tienen un conjunto de funciones de álgebra lineal. Apreciaría profundamente que la comunidad aquí en Stack Overflow contribuya con las experiencias que tengan con las siguientes bibliotecas:

Estoy interesado en F # para Numerics (ya que trabajo con F #) pero tengo dificultades para determinar las fortalezas y debilidades de las distintas bibliotecas. Como, qué funciones faltan o están incluidas en varias bibliotecas, y qué tan fácilmente se usan y qué tan bien se desempeñan.

DotNumerics parece una implementación completa de Lapack en C #, pero no puedo encontrar a nadie que haya compartido sus experiencias con él en cualquier lugar. Math.NET parece que con el tiempo podría ser una excelente y completa biblioteca matemática para .NET, pero es difícil decir qué tan activo es el proyecto y parece que está en una etapa muy cambiante en su etapa actual. Se ha hablado de alglib una o dos veces como sólido, pero me gustaría saber más sobre ellos en relación con los demás. Me gusta la idea de admitir una biblioteca numérica F # nativa, pero no estoy seguro de qué tan comprometido está el desarrollador (Flying Frog Consultancy) es apoyar y desarrollar F # para Numerics ... y qué funcionalidad planean incluir en su versión 1.0 y qué La fecha objetivo es para una versión 1.0.


También puedo sugerir ver una nueva biblioteca numérica .net llamada FinMath , que utilicé en mi desarrollo. Proporciona envoltorios de clase .net fáciles de usar para una gran cantidad de funcionalidades MKL (Intel Math Kernel Library en las que se basa), como el álgebra lineal (BLAS y LAPACK), estadísticas y FFT. Además, además contiene varios métodos avanzados, como solucionador de programación lineal y cuadrática, análisis de clústeres y otros. También incluye varias optimizaciones de cálculo de referencias de .net a c nativas que llevan a un alto rendimiento y una solución dll sencilla y fácil de usar.

Pero, desafortunadamente, no es de código abierto, no es gratis y, a diferencia de LAPACK, la mayoría de los métodos solo admiten reales de coma flotante de doble precisión. Y para algunos métodos LAPACK raramente utilizados, no se proporciona el envoltorio.


Un error común al elegir la biblioteca matemática es que esperamos que exista una biblioteca matemática para todo.

Antes de encontrar una biblioteca, primero debe preguntar "¿qué tipo de biblioteca de matemáticas quiero?". Luego tendrá una lista de criterios, como fuente abierta o no, alto rendimiento o no, portátil o no, fácil de usar o no.

A continuación mis comentarios sobre las bibliotecas en su lista (no he usado las dos últimas):

1) DotNumerics

( DotNumerics )

Usan un traductor fortran2C # que traduce el código de los procedimientos de Lapack en clases de C #. Las envolturas de C # fáciles de usar están escritas para las clases sin formato de Lapack.

2) Alglib ( Alglib )

Esta biblioteca está disponible en varios idiomas, como delphi, c ++ y c #. Creo que tiene una historia más larga que cualquier otra biblioteca que haya enumerado.

La mayoría de las funciones están traducidas de Lapack. Y su interfaz no es tan fácil de usar. (Pero tiene la flexibilidad de la interfaz de estilo Lapack). El uso de la interfaz de estilo Lapack significa que necesita saber más sobre la matriz y sus operaciones.

3) dnAnalytics ( dnAnalytics )

Esta biblioteca se está fusionando en Math.Net ahora. Parece que la fusión aún no se ha hecho. Algunas funciones en dnA aún no están disponibles en Math.Net.

4) Math.NET ( Math.NET ) Su implementación es desde cero, es decir, no es una traducción directa de Lapack. Su objetivo es proporcionar una biblioteca puramente gestionada para la plataforma .Net. Eso significa que el uso fácil y la portabilidad son dos objetivos principales. Una preocupación es si su propia implementación es correcta o no. Una cosa buena es que esta biblioteca es portátil en el sentido de que puede usarla en Mono, XNA, Windows Mobile Phone con poco esfuerzo.

Las bibliotecas anteriores no se centran en F #. Sin embargo, uno de los miembros del equipo en Math.Net trabaja para MS Research Cambridge y es un experto en F #. Como dijo Cuda, trabajarán en una interfaz F # para la biblioteca. También proporcionarán envoltorios nativos. Pero tal vez esperará mucho tiempo, más de "varios meses" :)

Por la preocupación del alto rendimiento, las bibliotecas anteriores no proporcionan envoltorios nativos (al menos ahora). Si desea un rendimiento nativo de .Net, debería utilizar una biblioteca comercial. Hay algunas soluciones de código abierto:

1. http://ilnumerics.net/ Esta es una solución similar a numpy para .Net. Se invocan a las DLL de Lapack (por ejemplo, el paquete no optimizado en netlib, las versiones optimizadas de AMD e Intel).

2. proveedor de matemáticas en F #. lee mi respuesta en https://.com/questions/3227647/open-source-math-library-for-f Dado que el código fuente de F # ahora es de código abierto. Puedo revisar la biblioteca y lanzar mis actualizaciones :)

Normalmente no necesitas una gran biblioteca de matemáticas. Solo necesita un poco de funcionalidad, por ejemplo, si necesita un procedimiento rápido de multiplicación de matrices, usar PInovke para una plataforma optimizada BLAS dll es la forma más fácil. Si necesita hacer un software de matemáticas orientado a la educación para niños, entonces la calidad de Math.net es suficiente. Si está en una empresa y está desarrollando componentes matemáticos confiables, ¿por qué no usar uno comercial respaldado por un equipo de alta calidad?

Encontrar una biblioteca de matemáticas perfecta es difícil. Pero encontrar una solución de biblioteca para su problema es generalmente fácil.


F # para Numerics es un producto de mi empresa, escrito en 100% F #. Nuestro énfasis está en las técnicas generales (desde FFT hasta la generación de números aleatorios) y no específicamente en álgebra lineal, aunque se proporcionan rutinas básicas de álgebra lineal (Cholesky, LU, QR, SVD en varios tipos de elementos / matrices) y estamos particularmente interesados ​​en la facilidad de uso. utilizar desde F #.

Si está buscando la totalidad de LAPACK, mis recomendaciones son Alglib si tiene un presupuesto o Optimización extrema si puede pagarlo. Alglib es un código totalmente administrado con una, umm, API "peculiar", por lo que es relativamente lento de ejecutar y engorroso de usar. La optimización extrema es una API más agradable que incluye Intel MKL y algunas rutinas adicionales, por lo que es más fácil de usar y mucho más rápida de ejecutar.

Debería advertirle que la calidad general de las bibliotecas .NET (gratuitas, comerciales e incluso el propio marco) es comparativamente pobre si proviene de un fondo de código abierto. Probé muchas de las otras bibliotecas que mencionaste y no me impresionó nada.