有没有推荐的方法从外部程序重复调用matlab?

时间:2013-01-11 17:17:58

标签: windows matlab batch-file erlang

我反复从另一个程序(用Erlang编写)调用matlab脚本MyMatlabScript。我这样做是使用包含以下内容的批处理文件:

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

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

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

可以这样做吗?

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

*因问题概述here而过慢;

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

我有这方面的经验。有三个主要选择:

  1. 使用os:cmd()

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

  4. 制作系统管道。如果你坚持使用Windows(NamedSystemPipe),那么你真的应该找不到有关如何操作的文档。

  5. 我更喜欢方法3用于本地唯一通信,2更喜欢基于任何网络。使用1可以获得绝对最小的灵活性。还有更多,但自从你问,这就是我的建议。

    最重要的是,不使用1,“缓慢”的问题已经消失。