2009-08-29 38 views
13

¿Cuáles son las mejores herramientas (más eficientes) disponibles en .NET (C#) para el cálculo:cálculos complejos en C#

  • integrales
  • derivadas parciales
  • otra matemáticas no trivial

¿Pueden las personas comentar sobre Mathematica y Matlab y su integración en C#?

+1

numérica o simbólicamente? –

+0

Para aclarar su última edición, ¿está tratando de utilizar las funciones de Mathematica y/o Matlab en C#, o está tratando de llamar a las clases de C# de Mathematica o Matlab? – las3rjock

+0

la aplicación está escrita en C# - necesito realizar cálculos desde C# (llamar a funciones externas) – mson

Respuesta

13

Math.NET es un conjunto de herramientas de código abierto matemático escrito en C# para la plataforma Microsoft .NET que tiene como objetivo proporcionar un marco limpia autónomo para ambos cálculos algebraicos científicos y simbólicos numéricos. En particular, Math.NET Numerics es el resultado de la fusión de dnAnalytics con Math.NET Iridium e incluye las siguientes características:

  • álgebra lineal real y compleja, densa y escasa (con LU, QR, eigenvalues, ... descomposiciones)
  • integración de funciones numérica (cuadratura) rutinas
  • transformadas integrales
+0

el enlace no funciona :-) –

+0

La URL es incorrecta, debe ser http://www.mathdotnet.com/ –

0

Puede consultar http://www.dmoz.org/Science/Math/Software/ - enumeran varias C#. Yo diría que pruebe algunas (ediciones demo si son comerciales) y haga algunos perfiles para ver si cumplen con sus requisitos. También puede usar MATLAB - vea la sección de Limitaciones y Alternativas de esa entrada. (No tengo experiencia personal con estas herramientas.)

1

que no tienen experiencia con el puente Mathematica/.NET, pero He utilizado el puente Mathematica/Java, que, a juzgar por la documentación, es bastante similar. Por supuesto, una pregunta que no puedo responder es qué tan buena es la implementación de la interfaz en términos de estabilidad y rendimiento.

Conceptualmente, he encontrado que la interfaz de Java para llamar a Mathematica es bastante buena. Tienes un conjunto de objetos y métodos que te permiten iniciar sesiones de Mathematica y enviarles expresiones de Mathematica para que sean evaluadas. Puedes enviar texto (lo cual es fácil en casos simples pero complicado si quieres algo no trivial) u objetos más estructurados Expr que reflejan la estructura del árbol de sintaxis. Estas expresiones le permitirán hacer casi cualquier cosa: evaluar integrales numéricamente o simbólicamente, tomar derivadas, resolver ODE, etc.

La única área en la que se cae es en el manejo de errores. Mathematica no tiene excepciones per se; en cambio, produce "mensajes" cuando tiene problemas y continúa tratando de evaluar la expresión en la que está trabajando.Esto tiene algún sentido a la luz de la semántica inusual de Mathematica (donde opera en expresiones con repetidas reescrituras de reglas) pero el conjunto predeterminado de métodos para comunicarse con Mathematica no le permite monitorear fácilmente esos mensajes desde dentro de Java (o, al parecer, , .NET), aunque es posible escribir sus propios métodos que hacen un mejor trabajo de esto.

+0

MathLink.NET de Mathematica también lucha con números complejos y Mathematica no es particularmente bueno en este tipo de problemas (por ejemplo, el 'Fourier' de Mathematica fue aproximadamente 4 veces más lento que FFTW último que miré y el soporte multinúcleo de Mathematica es horrible). –

1

lenguaje Visual F# de programación de Microsoft fue diseñado específicamente para este tipo de trabajo por lo que es probable que sólo quiere llamar a una solución existente F # de su código C#. Por ejemplo, en Visual Studio 2010 con nuestra biblioteca F# for Numerics instalado puede integrar x 3 -x-1 a partir de -3 a 3 interactiva de la siguiente manera:

> Functional.integrate (fun [x] -> x**3.0 - x - 1.0) [-3.0, 3.0];; 
val it : float = -6.0 

y calcular la derivada parcial de esa función con respecto a x en x=2 de la siguiente manera:

> Functional.d (fun x -> x**3.0 - x - 1.0) 2.0;; 
val it : float = 11.0 
0

Si usted tiene un producto complementario MATLAB Builder para .NET, puede empaquetar código de MATLAB en un ensamblado de .NET que se puede llamar desde C#.