如何从 C++ 执行 Matlab 脚本

Posted

技术标签:

【中文标题】如何从 C++ 执行 Matlab 脚本【英文标题】:How to execute a Matlab script from C++ 【发布时间】:2015-08-20 10:27:48 【问题描述】:

我在 Visual Studio 中有一个 C++ 程序,它记录数据并将其保存到文件中。我想从该文件中读取一些 Matlab 分析并将结果保存在单独的文件中。然后,我的 C++ 程序继续运行。

当 Matlab 在同一台计算机上打开时,有什么方法可以自动在 C++ 中对调用进行编码?

提前致谢!

【问题讨论】:

似乎有几个有用的链接here 似乎有一些重复,请参阅here、hereandmanymanymore 谢谢!我通读了它们,这是我找到的一个可能的解决方案,但就是将 Matlab 代码转换为 C++。但是,我使用的是整个 Matlab 工具箱,这就是为什么我需要从 VS 调用 Matlab 并在 Matlab 中执行脚本,而不是翻译工具箱,这是我做不到的。 【参考方案1】:

根据您的需要,有多种从 C++ 调用 MATLAB 的方法。过去曾在这里提出过许多类似的问题,我将参考这些问题并为您提供解决方案,因为您的要求似乎有所不同。

    您想要 MATLAB C 还是 C++ API? 然后使用 mex 描述的函数 here、here、here 和实际的 MATLAB documentation 您想将您的 MATLAB 程序转换为 C++ 吗? 然后使用 MATLAB Coder 描述的 here、here 和 here 您想在 C++ 中运行 MATLAB 脚本吗? 然后调用 MATLAB Engine 或编写一个 shell 脚本,并在 here 和 here 中描述从 C++ 调用的脚本

您的问题属于第三类。因此,您需要调用 MATLAB 引擎(参见 Tal Darom 的答案)或编写一个 shell 脚本。我将解释后者。让我们编写一个名为 matlab_script.sh 的 shell 脚本:

#/bin/sh
matlab -nodisplay -nojvm -nosplash < your_matlab_file.m 

然后在您的 C++ 代码中执行以下操作:

system("matlab_script.sh");

您需要matlab_script.sh 才能执行。在linux下你通常会做chmod +x matlab_script.sh

【讨论】:

您无需查看 shell 脚本,使用 Matlab 引擎的程序的用户无需安装 Matlab 即可使用 Matlab 编译器运行它。 对于 OP 的需求,Matlab 编译器 SDK 是不是太过分了?他正在使用 Matlab 工具箱,他可能希望在其中交互式地编辑他的 Matlab 脚本和他的 C++ 代码。他的 Matlab 和 C++ 程序实际上从不互相交谈。 C++ 写入和 Matlab 读取,基本 IO。一个 shell 脚本就可以做到这一点。 这不是对当前 OP 问题的回答,而是重要说明:MATLAB Engine 需要在同一台 PC 上安装 MATLAB,而使用 .exe 和 .dll 等有时只需要 MATLAB Runtime。 【参考方案2】:

您可以在程序中启动 matlab 引擎,并使用 matlab 引擎 API 运行 matlab 脚本。

请参阅文档:http://www.mathworks.com/help/matlab/calling-matlab-engine-from-c-c-and-fortran-programs.html

【讨论】:

这是要走的路。 非常感谢您的帮助!【参考方案3】:

您可以使用the Matlab Compiler SDK,它将您的 matlab 代码变成一个独立的程序或库。

然后您可以从您的 C++ 代码中调用此库,最终用户甚至不需要安装 Matlab(只需编译器运行时,您可以部署“免版税”),请参阅 this web page 了解详情你可以用它。

【讨论】:

以上是关于如何从 C++ 执行 Matlab 脚本的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB 的函数句柄

matlab中,如何加快数据运算速度?

MATLAB 中的数据流,输入数据来自 C++ 可执行文件

matlab基本语法

Matlab如何导入excel数据

如何从 Matlab 调用具有多个输出的 C++ 函数?