2010-12-22 139 views
6

我想从mathematica中调用一个matlab函数。如何最好地做到这一点?如何从mathematica调用matlab函数?

我发现一个ancient post on Wolfram site描述了一种方法来做到这一点,这仍然是连接两者的方式?

+0

+1我很想知道如何做到这一点,在Matlab中有些事情更容易,Mathematica中的一些事情更容易! – mor22 2010-12-22 16:16:50

+0

约翰,你有没有尝试我在2013年5月发布的其他答案? – Szabolcs 2014-06-14 14:15:21

回答

2

您可以使用mEngine。预编译的Windows MathLink可执行文件适用于Mathematica 8.在Windows上,您可能需要add MATLAB to the system path

与NETLink方法相比,其优点是在Mathematica和MATLAB之间传输变量将如mGet["x"]mPut["x"]一样简单。虽然这也可能与NETLink一样,但是mEngine的优势在于你不需要自己实现它(如果像我一样,你对COM或.NET一无所知,它是非常棒的)

1

我会想象这是一个普遍的难题,但可以通过针对特定情况的小编程轻松解决。我将用C#演示。

我会建立一个调用串,像这样。

  • Mathematica调用C#程序,通过MathLink。这对于设置来说几乎是微不足道的,Mathematica在Mathematica \ 8.0 \ SystemFiles \ Links \ NETLink目录中有一个示例项目。
  • C#程序调用Matlab。有几种方法可以进行此调用,并且this handy link介绍了如何执行此操作并提供示例代码。
  • C#程序返回Matlab结果。

总而言之,我可以在少于50行的C#代码中完成这个工作,以解决特定的问题。换句话说,没有太多的工作。可能存在的问题是数据转换,但是如果您想发送来回数组数据,MathLink提供了很多开箱即用的功能。同样,Mathematica可以通过Java连接到MATLAB,尽管我自己并没有这样做。

也许最简单的连接可以通过Python进行。 Mathematica提供了一个可安装的python库,位于Mathematica \ 8.0 \ SystemFiles \ Links \ NETLink,并且Matlab有一个名为PyMat的插件库,可以下载here,但是这个软件包并没有被长期保存时间和支持只有最古老的Matlabs。

或者,你可以放弃Matlab完全赞成SAGE和/或numpy。

6

您可以尝试NETLink这至少在Windows下:

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

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

然后你就可以调用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

现在有了一个新的包---这个--- MATLink。这是我知道的最完整的这种包。 (免责声明:我是MATLink的开发人员之一。)

MATLink让您...

  • 无缝调用MATLAB函数形成两个系统

大多数MATLAB数据类型的支持,包括数学之间

  • 传输数据稀疏数组,结构体和单元格。

    更完整的说明可用here。有关详细示例,请参阅website