4

我反复MyMatlabScript从另一个程序(用 Erlang 编写)调用 matlab 脚本。我正在使用包含以下内容的批处理文件执行此操作:

matlab -nodesktop -nosplash -wait -r "addpath('C:/...'); MyMatlabScript; %quit;"

这意味着每次我运行批处理文件脚本时都必须启动 Matlab。它可以工作,但速度很慢*。

为了提高性能,我希望能够一次启动 Matlab,然后以某种方式,使用 Erlang 或批处理脚本,使用那个 Matlab 实例重复启动我的 Matlab 脚本。

这可以做到吗?

注意,我在 Windows7 上使用 Matlab 7.8.0 (R2009a)。

*由于此处概述的问题,速度特别慢!

4

3 回答 3

6

这并不简单。但是您可以尝试在 MATLAB 中使用 COM 自动化服务器接口。您需要有用于与 COM 自动化服务器交互的 Erlang 库。使用此界面,您可以创建一个自动化服务器,然后继续向它发送命令。该文档可在http://www.mathworks.com/help/matlab/call-matlab-com-automation-server.html获得。在文档中有使用 Visual Basic 代码的示例。

于 2013-01-11T17:52:16.663 回答
2

我不知道将消息传递到 Matlab 是否是一个可行的选择,但我想提出一个替代方案。Matlab 有一个“定时器”对象,它可以让你指定一个回调函数。Matlab 回调函数会定期检查一个文件,该文件由您的 Erlang 程序更改。更改的文件会触发所需的 Matlab 例程。好吧,就编程风格而言,它不是“高级美食”,但它应该可以胜任。

于 2013-01-13T17:43:23.883 回答
1

我有这方面的经验。主要有以下三种选择:

  1. Erlang 命令行调用 Matlab 使用 os:cmd()

  2. 编写一个要求两个应用程序分开并通过 tcpip 进行通信的协议。好处是现在 Erlang 是一个服务器,反之亦然,但是你编码它。挑战是 Matlab 中的协议代码,Erlang 是专门为它构建的。

  3. 制作系统管道。如果您坚持使用 Windows (NamedSystemPipe),那么您真的不应该在查找有关如何操作的文档时遇到问题。

对于仅本地通信,我更喜欢方法 3,而对于任何基于网络的东西,我更喜欢方法 2。使用 1 给您绝对最小的灵活性。还有更多,但既然你问,这是我推荐的。

最重要的是,不使用 1 就解决了“慢”问题。

于 2013-01-20T02:37:35.873 回答