【问题标题】:How to invoke a matlab function from mathematica?如何从mathematica调用matlab函数?
【发布时间】:2010-12-22 15:38:04
【问题描述】:

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

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

【问题讨论】:

  • +1 我也很想知道如何做到这一点,在 Matlab 中有些事情更容易,而在 Mathematica 中有些事情更容易!
  • 约翰,您是否尝试过我在 2013 年 5 月发布的其他答案?
  • @Szabolcs 不,你是在我换了一份新工作之后发布的,我只使用 Matlab。我家里有mathematica,但不需要在家里做这种交叉脚本。

标签: matlab wolfram-mathematica


【解决方案1】:

您至少可以在 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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 请参阅this other answer 关于MATLink。 MATLink 受到 mEngine 的启发,并且远远优于它(在功能和可靠性方面)。
    【解决方案3】:

    我想这通常是一个难题,但可以通过针对特定情况的一些编程轻松解决。我将使用 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 的插件库,可以下载here ,但是这个包很久没维护了,只支持最古老的Matlabs。

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

    【讨论】:

      【解决方案4】:

      现在有一个新的包 --- MATLink。这是我所知道的最完整的此类软件包。 (免责声明:我是 MATLink 的开发者之一。)

      MATLink 让您...

      • 从 Mathematica 无缝调用 MATLAB 函数

      • 在两个系统之间传输数据

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

      here 提供了更完整的说明。详细示例见website

      【讨论】:

        猜你喜欢
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-15
        相关资源
        最近更新 更多