Java调用Matlab代码初体验

  |   评论   |   浏览

背景

用Matlab编写的一段代码,希望通过Java来进行集成。

原理

MATLAB Engine API for Java,支持通过Java来启动和停止Matlab,以及与Matlab进行数据和函数调用交互。

初体验

准备Java文件

文件在 {matlabroot}/extern/examples/engines/java 目录下。

需要额外依赖 engine.jar 包,在 {matlabroot}\extern\engines\java\jar\engine.jar 下面。

添加完中,在IDEA中可以看到 com.mathworks.engine.MatlabEngine类可以正常导入了。

此时运行Java程序会报错,提示

com.mathworks.engine.EngineException: Unable to launch MATLAB or connect a shared MATLAB session. at com.mathworks.engine.FutureMatlab.get(FutureMatlab.java:57) at com.mathworks.engine.FutureMatlab.get(FutureMatlab.java:16) at EngineConsoleDemo.main(EngineConsoleDemo.java:19)

设置环境变量并运行

在macOS下运行

编译

javac -classpath matlabroot/extern/engines/java/jar/engine.jar MyJavaCode.java

运行

% java -Djava.library.path=$matlabroot/bin/maci64 -classpath .:$matlabroot/extern/engines/java/jar/engine.jar EngineConsoleDemo Find numbers from a matrix that are greater than five and square them: Input matrix: 1.47 8.23 7.29 9.48 9.32 1.90 6.14 2.78 0.45 3.24 3.26 3.55 4.29 9.90 4.72 8.95 Elements greater than 5: 9.32 8.23 9.90 7.29 6.14 9.48 8.95 Square of numbers greater than 5: 86.79 67.67 97.91 53.17 37.70 89.78 80.11

运行GUI版本

java -Djava.library.path=$matlabroot/bin/maci64 -classpath .:$matlabroot/extern/engines/java/jar/engine.jar EngineGUIDemo

java -Djava.library.path=$matlabroot/bin/maci64 -classpath .:$matlabroot/extern/engines/java/jar/engine.jar EngineGUIDemo

完成后,在弹出来的对话框中,先点击 Start MALTAB,再运行业务逻辑。自测通过。

参考

  1. Call MATLAB from Java
  2. Build Java Engine Programs