本文主要解决了java项目中调用matlab程序过程中遇到的问题,下文主要分matlab的jar包部署以及java项目配置两个方面来分析。
1、matlab项目的部署 -- 生成jar包
保存matlab文件,生成.m文件
%画图 自定义函数drawplot 参数 x y
function drawplot(x, y)
plot(x, y); %%使用matlab函数plot()作图
grid on %网格显示
xlabel('X轴值')
ylabel('Y轴值')
title('Java调用MatLab作图例子')
app --> library Compiler
选择生成类型为java package ,添加.m文件,配置名称等信息生成
生成包中带有jar文件
2、java项目配置
修改环境变量,path添加matlab的dll文件路径。jdk的版本一定要和matlab匹配,否则执行会报 Failed to find the required library mclmcrrt9_4.dll on java.library.path 。
jdk1.8兼容2018a版本的matlab
注意:还需要配置的环境变量 JAVA_HOME -- jdk的安装路径,MATLAB_JAVA -- jre路径
把matlab生成的jar包引入java项目
引入固定的java调用matlab必备的jar包javabuilder
执行调用程序:
import com.mathworks.toolbox.javabuilder.*;
import drawplot.Class1;
public class map {
public static void main(String[] args) {
// TODO Auto-generated method stub
MWNumericArray x = null; // 存放x值的数组
MWNumericArray y = null; // 存放y值的数组
Class1 thePlot = null; // plotter类的实例(在MatLab编译时,新建的类)
int n = 20; // 作图点数
try {
// 分配x、y的值
int[] dims = { 1, n };
x = MWNumericArray.newInstance(dims, MWClassID.DOUBLE,
MWComplexity.REAL);
y = MWNumericArray.newInstance(dims, MWClassID.DOUBLE,
MWComplexity.REAL);
// 定义 y = x^2
for (int i = 1; i <= n; i++) {
x.set(i, i);
y.set(i, i * i);
}
// 初始化plotter的对象
thePlot = new Class1();
// 作图
thePlot.drawplot(x, y); //调用作图的matlab方法
thePlot.waitForFigures();
}
catch (Exception e) {
System.out.println("Exception: " + e.toString());
}
finally {
// 释放本地资源
MWArray.disposeArray(x);
MWArray.disposeArray(y);
if (thePlot != null)
thePlot.dispose();
}
}
}
执行结果: