如何使用matlabcontrol.jar从Java调用用户定义的Matlab
我试图调用用户定义的Matlab函数(M文件),该函数从我在Eclipse中开发的Java应用程序中获取3个参数(Java字符串)。 目前,我能够使用disp
或sqr
等函数/命令调用proxy.eval
和proxy.feval
方法。 但是当我尝试调用用户定义的函数时,它在matlab控制台上说没有像这样定义的函数,并且在Java控制台MatlabInvocationException
发生MatlabInvocationException
。
然后我尝试使用一个简单的用户定义函数,该函数不带参数,只有单行disp('Hello')
但结果仍然相同。 所以我认为不是类型转换问题,而是如何调用用户定义的函数。
请尽快有人帮帮我吗? 我很快就会完成这个项目的截止日期。 如果有人能提出解决方案,我会非常感激。 (Joshuwa Kaplan先生,有没有关于在你的post中解决这样的问题的指南?我试过但没有找到任何东西)
提前致谢
您必须在MATLAB搜索路径上拥有任何用户定义的m文件,就像您在MATLAB中正常工作一样。
我测试了以下示例:
C:\一些\路径\ myfunc.m
function myfunc() disp('hello from MYFUNC') end
HelloWorld.java
import matlabcontrol.*; public class HelloWorld { public static void main(String[] args) throws MatlabConnectionException, MatlabInvocationException { // create proxy MatlabProxyFactoryOptions options = new MatlabProxyFactoryOptions.Builder() .setUsePreviouslyControlledSession(true) .build(); MatlabProxyFactory factory = new MatlabProxyFactory(options); MatlabProxy proxy = factory.getProxy(); // call builtin function proxy.eval("disp('hello world')"); // call user-defined function (must be on the path) proxy.eval("addpath('C:\\some\\path')"); proxy.feval("myfunc"); proxy.eval("rmpath('C:\\some\\path')"); // close connection proxy.disconnect(); } }
我们编译并运行Java程序:
javac -cp matlabcontrol-4.0.0.jar HelloWorld.java java -cp ".;matlabcontrol-4.0.0.jar" HelloWorld
将打开一个MATLAB会话,并显示输出:
hello world hello from MYFUNC
您也可以将文件夹添加到路径一次,然后使用SAVEPATH将其保留。 这样你就不必每次都这样做。