2009-10-22 92 views
11

我在MATLAB中有一个.m文件,我想从Java调用一个字符串或Java中的任何解决方案。这听起来很简单,但由于某种原因,我无法完成工作。从Java运行MATLAB函数

我尝试这样做:

matlab -nosplash -wait -nodesktop -r myFunction 

,但我不知道我是如何解析的答案,因为MATLAB打开它自己的命令行(在Windows)。

我使用这个,但它不返回任何东西。

Process p = Runtime.getRuntime().exec(commandToRun); 
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream())); 

也似乎每次我打电话给MATLAB打开一个单独的窗口,这是一个问题,因为我想运行这么多次。

+0

也许'-logfile'命令选项可能有所帮助:http://stackoverflow.com/questions/1518072/suppress-start-message-of-matlab/1518165#1518165 – Amro 2009-10-22 16:28:32

回答

7

诀窍是使用MatlabControl类http://www.cs.virginia.edu/~whitehouse/matlab/JavaMatlab.html。它使用起来非常简单,您可以完成您想要做的事情(以及更多)。

+0

Jeff!抢!很高兴见到你们在这里。 – 2009-10-23 17:16:43

+0

小世界,不是吗? – 2009-10-23 17:20:11

0

存在一个称为JaCoB(http://sourceforge.net/projects/jacob-project/)的良好Java-COM-Bridge,您可以使用它在后台自动启动Matlab作为COM服务器。然后,您可以按照Matlab帮助中的说明与Matlab COM接口进行交互。

尽管这是一个非常通用的接口,但它提供了足够的灵活性,可以轻松地对Matlab进行一些调用,就像您的情况一样。

只需下载JaCoB软件包,然后查看文档文件夹中的某些文档。 您还必须在您的路径中包含Jacob DLL。

7

matlabcontrol基于Jeff提到的MatlabControl使用的相同的底层MATLAB库,但是更新,更可靠,更有文档记录。要开始,请看看walkthrough

2

JAMAL是一个开源的,适合自己需要

+0

此链接不起作用。 – user1850484 2016-09-13 10:34:54

2

在Matlab中R2016b基于RMI的爪哇(Java远程方法调用API)库,MathWorks公司加入MATLAB Engine API for Java它允许从Java运行MATLAB代码。