如何从mathematica调用matlab函数?

时间:2010-12-22 15:38:04

标签: matlab wolfram-mathematica

我想从mathematica调用matlab函数。怎么做到最好?

我发现ancient post on Wolfram site描述了一种方法,这仍然是连接两者的方法吗?

4 个答案:

答案 0 :(得分:6)

至少在Windows下,你可以试试NETLink

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

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

然后你可以调用Matlab函数:

In[4]:= matlab@Execute["version"]

Out[4]= "
ans =

7.9.0.529 (R2009b)

"

In[5]:= matlab@Execute["a=2"]

matlab@Execute["a*2"]

Out[5]= "
a =

     2

"

Out[6]= "
ans =

     4

"

HTH

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

我认为这通常是一个难题,但可以通过针对特定情况的一些编程轻松解决。我将用C#演示。

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

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

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

也许最简单的连接可以通过Python完成。 Mathematica提供了一个可安装的 MathLink python库,位于 Mathematica \ 8.0 \ SystemFiles \ Links \ NETLink ,Matlab有一个名为PyMat的插件库,可以下载{{3但是这个软件包已经很长时间没有维护,只支持最古老的Matlabs。

或者你可以完全放弃Matlab,转而使用SAGE和/或numpy。

答案 3 :(得分:0)

现在有一个新的包--- MATLink。这是我所知道的最完整的这样一揽子计划。 (免责声明:我是MATLink的开发人员之一。)

MATLink让你......

  • 从Mathematica

  • 无缝调用MATLAB函数
  • 在两个系统之间传输数据

支持大多数MATLAB数据类型,包括稀疏数组,结构和单元格。

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