我想从mathematica调用matlab函数。怎么做到最好?
我发现ancient post on Wolfram site描述了一种方法,这仍然是连接两者的方法吗?
答案 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#演示。
我会建立一串调用,就像这样。
总而言之,对于特定问题,我可以在少于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)