有没有办法从外部调用 Matlab 函数,特别是通过 Windows cmd
(还有 Linux 终端、LUA 脚本等...),而不打开新的实例每次都是 Matlab?
例如在 cmd
中:
matlab -sd myCurrentDirectory -r "function(parameters)" -nodesktop -nosplash -nojvm
相对较快地打开一个新的 Matlab 实例并执行我的函数。打开和关闭这个简化的 matlab 提示需要大约 2 秒(没有计算)——因此 4000 次执行超过 2 小时。我想避免这种情况,因为被调用的函数总是位于同一个工作区中。能否始终在同一个实例中完成?
我已经做了一些研究,发现了 MATLAB COM Automation Server 的可能性,但对我来说似乎很复杂,而且我看不到使其适用于我的案例的基本步骤。有什么建议吗?
我不熟悉 c/c++/c#
但我正在考虑使用 python
(但只是在最坏的情况下)。
最佳答案
基于 @Ilya Kobelevskiy 的不可行但经过深思熟虑的想法,这里是最终的解决方法:
function pipeConnection(numIterations,inputFile)
for i=1:numIterations
while(exist('inputfile','file'))
load inputfile;
% read inputfile -> inputdata
output = myFunction(inputdata);
delete('inputfile');
end
% Write output to file
% Call external application to process output data
% generate new inputfile
end;
另一个方便的解决方案是编译 Matlab 函数的可执行文件:
mcc -m myfunction
使用 cmd
运行此 .exe
文件:
cd myCurrentDirectory && myfunction.exe parameter1 parameter2
请注意,参数现在作为字符串传递,原始 .m
文件需要考虑到这一点进行调整。
进一步说明:
- 我想 Matlab 仍然需要安装在系统上,不过 没有必要运行它。
- 我不知道这种方法的复杂性分别有多大限制 基础功能。
- 与问题中给出的初始方法相比的加速是 相对较小
关于matlab - 在不打开 Matlab 新实例的情况下通过外部应用程序调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18781803/