如何从 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 脚本的主要内容,如果未能解决你的问题,请参考以下文章