2010-12-22 15 views
6

Me gustaría llamar a una función de matlab de mathematica. ¿Cuál es la mejor manera de hacerlo?¿Cómo invocar una función de matlab desde mathematica?

He encontrado un ancient post on Wolfram site describiendo una forma de hacerlo, ¿esta es todavía la forma de conectar los dos?

+0

+1 Me encantaría saber cómo hacer esto también, algunas cosas son más fáciles en Matlab y algunas cosas son más fáciles en Mathematica. – mor22

+0

John, ¿has probado la otra respuesta que publiqué en mayo de 2013? – Szabolcs

+0

@Szabolcs No, lo publicaste después de que me mudé a un nuevo trabajo, donde solo uso Matlab. Tengo matematicas en casa, pero no he tenido que hacer este tipo de guiones cruzados en casa. – John

Respuesta

2

Puede utilizar mEngine. El ejecutable Windows MathLink precompilado funciona con Mathematica 8. En Windows puede necesitar add MATLAB to the system path.

La ventaja de esto en comparación con el método NETLink es que la transferencia de variables entre Mathematica y MATLAB será tan fácil como mGet["x"] o mPut["x"]. Aunque esto también podría ser posible con NETLink, la ventaja de mEngine es que no necesita implementarlo usted mismo (lo cual es genial si, como yo, no sabe nada de COM o .NET)

+0

Consulte [esta otra respuesta] (http://stackoverflow.com/a/16329357/695132) sobre [MATLink] (http://matlink.org). MATLink se inspiró en mEngine y es muy superior a él (en funcionalidad y fiabilidad). – Szabolcs

1

Me imagino que este es un problema difícil en general, pero se puede resolver fácilmente con un poco de programación para un caso particular. Lo demostraré con C#.

Construiría una cadena de llamadas, como tal.

  • Mathematica llama a un programa en C#, a través MathLink. Esta configuración es casi trivial y Mathematica tiene un proyecto de ejemplo en el directorio de Mathematica \ 8.0 \ SystemFiles \ Links \ NETLink.
  • El programa C# llama a Matlab. Hay varias formas de realizar esta llamada, y this handy link describe cómo hacerlo y ofrece un código de muestra.
  • El programa C# devuelve los resultados de Matlab.

Con todo, podría hacer esto en menos de 50 líneas de código C#, para un problema específico. No mucho trabajo, en otras palabras. Los posibles problemas son la conversión de datos, pero si desea enviar conjuntos de datos de ida y vuelta, MathLink ofrece un montón de caja. Del mismo modo, Mathematica se puede vincular a MATLAB a través de Java, aunque yo mismo no lo he hecho.

Quizás la conexión más fácil podría hacerse a través de Python. Mathematica ofrece una biblioteca de Python instalable MathLink, ubicada en Mathematica \ 8.0 \ SystemFiles \ Links \ NETLink, y Matlab tiene una biblioteca de complementos llamada PyMat, que puede descargarse here, pero este paquete no se ha mantenido por mucho tiempo. tiempo y solo apoya a los más antiguos de Matlabs.

Alternativamente puede renunciar a Matlab en conjunto a favor de SAGE y/o numpy.

6

Usted puede intentar NETLink por esto por lo menos en Windows:

In[1]:= Needs["NETLink`"] 
matlab = CreateCOMObject["matlab.application"] 

Out[2]= «NETObject[COMInterface[MLApp.DIMLApp]]» 

Y entonces se puede invocar funciones de Matlab:

In[4]:= [email protected]["version"] 

Out[4]= " 
ans = 

7.9.0.529 (R2009b) 

" 

In[5]:= [email protected]["a=2"] 

[email protected]["a*2"] 

Out[5]= " 
a = 

    2 

" 

Out[6]= " 
ans = 

    4 

" 

HTH

0

Ahora está un nuevo paquete para esto --- MATLink. Es el paquete más completo que conozco. (Descargo de responsabilidad: soy uno de los desarrolladores de MATLink.)

Matlink le permite ...

  • perfectamente llamar a las funciones de MATLAB forman Mathematica

  • transferir datos entre los dos sistemas

La mayoría de los tipos de datos de MATLAB son compatibles, incluyendo dispersas matrices, estructuras y celdas.

Una descripción más completa está disponible here. Para ver ejemplos detallados, consulte website.

Cuestiones relacionadas