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
,再运行业务逻辑。自测通过。