Java调用Matlab代码初体验

  |   0 评论   |   0 浏览

背景

用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