我反复从另一个程序(用Erlang编写)调用matlab脚本MyMatlabScript
。我这样做是使用包含以下内容的批处理文件:
matlab -nodesktop -nosplash -wait -r "addpath('C:/...'); MyMatlabScript; %quit;"
这意味着每次运行批处理文件脚本时都必须启动Matlab。它工作但很慢*。
为了提高性能,我希望能够启动Matlab一次,然后以某种方式,使用Erlang或批处理脚本,使用Matlab的一个实例重复启动我的Matlab脚本。
可以这样做吗?
注意,我在Windows7上使用Matlab 7.8.0(R2009a)。
*因问题概述here而过慢;
答案 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)
我有这方面的经验。有三个主要选择:
使用os:cmd()
编写一个协议,要求两个应用程序分开并通过tcpip进行通信。好处是现在Erlang是一个服务器,反之亦然,但是你编码它。挑战是Matlab中的协议代码,Erlang是专门为它构建的。
制作系统管道。如果你坚持使用Windows(NamedSystemPipe),那么你真的应该找不到有关如何操作的文档。
我更喜欢方法3用于本地唯一通信,2更喜欢基于任何网络。使用1可以获得绝对最小的灵活性。还有更多,但自从你问,这就是我的建议。
最重要的是,不使用1,“缓慢”的问题已经消失。