Matlab入门及Java调用
1. Matlab环境搭建
1.1 网络下载软件,如果是用破解版,注意要找完全破解版本,不然打包会失败。另外2014b、2016a版本用的JDK还是1.7的,软件强制要求大版本一致了,所以注意版本。
1.2 完成软件安装及破解,检查环境配置
在命令行输入:version –java,查看matlab使用的JDK版本
1.3 所以需要安装1.7的JDK(大版本一致就好)
命令行输入:getenv JAVA_HOME,能正常输出结果环境才OK
1.4 检查Matlab环境变量是否正确,不正确的话Java调用会报错,如果电脑上安装过不同的版本容易出问题,正确的配置如下,可以参考:PATH中包含matlab的配置:
D:\software\MATLAB\R2016a\runtime\win64;
D:\software\MATLAB\R2016a\bin;
D:\software\MATLAB\R2016a\polyspace\bin
2. 编写matlab被调用函数
2.1 新建函数
2.2 在代码编辑区域,写如下简单的代码
function [sum,sub,mul,div] = operation(a,b)
sum = a + b;
sub = a - b;
mul = a * b;
div = a / b;
end
2.3 打包工程,这一步比较关键,也是容易出问题的地方
点击应用程序à显示更多
或者在命令窗口输入deploytoolà弹出框口选择Library Compiler(这两种方式都可以开发打包配置的界面)2.4 打包配置界面选择Jar包,并添加需要使用的m文件,也就是写了算法的文件,注意是在图示2的位置添加文件,这里不添加后边6编译的那个绿色的对勾不会出现
2.5 配置完成后就打包,这里会比较慢,耐心等
2.6 打包完成后生成的目录:
3. Java调用
3.1 从安装目录R2016a\toolbox\javabuilder\jar 中复制文件javabuilder.jar跟刚才打包的Jar包一起放进Java工程的编译目录
3.2 编写Java调用代码,示例如下:
package javaCallMatlab;
/**
*
*/
import com.mathworks.toolbox.javabuilder.MWArray;
import com.mathworks.toolbox.javabuilder.MWClassID;
import com.mathworks.toolbox.javabuilder.MWComplexity;
import com.mathworks.toolbox.javabuilder.MWException;
import com.mathworks.toolbox.javabuilder.MWNumericArray;
import matlabTest.JavaCallTest;
public class RserveCall {
public static void main(String[] args) throws MWException {
JavaCallTest abc = new JavaCallTest();
try {
Object[] result = null;
int a = 10, b = 2;
result = abc.operation(4, a, b);
System.out.println(result[0].toString());
System.out.println(result[1].toString());
System.out.println(result[2].toString());
System.out.println();
} catch (MWException e1) {
e1.printStackTrace();
} finally {
System.gc();
}
// 测试画图
drawImg();
// 测试动态图
abc.cometSimple();
}
private static void drawImg() {
MWNumericArray x = null; // 存放x值的数组
MWNumericArray y = null; // 存放y值的数组
JavaCallTest 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 JavaCallTest();
// 作图
thePlot.drawplot(x, y);
thePlot.waitForFigures();
}
catch (Exception e) {
System.out.println("Exception: " + e.toString());
}
finally {
// 释放本地资源
MWArray.disposeArray(x);
MWArray.disposeArray(y);
if (thePlot != null)
thePlot.dispose();
}
}
}
3.3 运行后结果如下:
调用计算
调用画静态图
调用画动态图
4. 总结:
至此也就调用成功了,JDK版本、破解程序的完整性、打包时添加文件的方式,这是需要注意的地方。更加深入的使用再慢慢研究了。