近来因为甲方需要做拟合等功能,需要用到matlab软件,并将其功能在java中实现,然后在服务器上也要实现,因为之前根本没有听说过,所以我苦心泣血,狂干一星期找到了,踩了无数个坑,终于实现了,因此想分享给大家!
目录
2、Matlab中打jar包(基于R2018b版本,但是R2020以下都适用)
一、Windows下java调用matlab
1、Matlab安装
网上很多教程,这里不建议装太新的版本,因为容易出错误!!!
要注意的地方就是,一定要注意版本!!!下面会介绍
2、Matlab中打jar包(基于R2018b版本,但是R2020以下都适用)
1、我们先创建一个.m文件,直接新建脚本,把这段代码复制进去就行
//这是相比于其他人复杂一点的程序,输入一个变量,并返回一个数组
//test(input) 是你的函数
function [result1, result2, result3] = test(input)
result2 = 3;
result3 = 2;
result1 = input;
end
2、命令行窗口测试
test(4)
3、进行编译打包
在命令行输入deploytool
deploytool
①选择java package
②选择自己要打包的.m文件(如果找不到的话,请返回主界面,将文件夹改为当前.m文件的文件夹)
③填写jar包名字
④修改类名
⑤右上角的Package点击
⑥成功后
⑦找到for_redistribution_files_only文件即可有jar包
可能遇到的问题!!!
1、有可能在你的.m文件中注释导致你的打包出现问题,请删除!!!
2、java版本对应的问题
命令行输入version -java
version -java
找到当前matlab版本对应的jdk环境,一定要对应!!环境变量也要设定好!
3、文件类型无效,提示只能接受具有单个入口点的MATLAB函数和MEX文件作为导出函数!!
可能你的.m文件是一个类,matlab由于版本的原因,我尝试了R2022版本的,是可以将类文件进行打包的,但是2018版本就不能打包,(类文件是方便写程序,使得程序比较简单)所以,我们将类文件,改成一个或者多个单个函数的.m文件,
例如:
test.m文件调用了psobj.m,启动程序是test.m,我们进行打包,
我们只需选择
psobj.m文件会自动添加
至此,Jar包就生成完毕了
3、在java中使用matlab生成的jar包
在项目中创建lib文件夹,将刚刚生成的jar包,复制到该文件夹下,
将jar包引入
选择library
找到该项目下jar包的位置,确定OK!
我们只需要引入import,即可引入成功,我这里用matlabTest举例
import XX.XX;
//第一个xx是你的包名,第二个是你的类名
//我引入
import matlabTest.matlabTest;
点进去看一下源码,那我们的函数怎么使用呢,输入的参数一定要和你的.m文件对应!!
public void untitled(List var1, List var2) throws MWException {
this.fMCR.invoke(var1, var2, sUntitledSignature);
}
public void untitled(Object[] var1, Object[] var2) throws MWException {
this.fMCR.invoke(Arrays.asList(var1), Arrays.asList(var2), sUntitledSignature);
}
//我们一般使用这个方法,第一个参数是指你返回多少结果,第二个参数指 你可以输入多个参数,也就是你matlab中想要输入的参数,untitled是我在matlab中函数的名字
public Object[] untitled(int var1, Object... var2) throws MWException {
Object[] var3 = new Object[var1];
this.fMCR.invoke(Arrays.asList(var3), MWMCR.getRhsCompat(var2, sUntitledSignature), sUntitledSignature);
return var3;
}
在使用matlab生成的jar包时,我们还需要将javabuilder导入!!!
具体的位置是在:xx\MATLAB\R2018b\toolbox\javabuilder\jar\javabuilder.jar
xx\MATLAB\R2018b\toolbox\javabuilder\jar\javabuilder.jar
上述同样的方法,导入即可!
public class test {
public static void main(String[] args) throws MWException {
matlabTest test = new matlabTest();
test.untitled(1,"参数1","参数2");
}
}
即可进行操作!!
注意:
因为matlab中经常使用二维数组,故我们也有对应的类,并将data作为参数传入即可!!
double[][] doubles ={{1,1,1,1},{2,2,2,2},{3,3,3,3}};
MWNumericArray data = new MWNumericArray(doubles, MWClassID.DOUBLE);
至此 在windows下调用matlab生成的jar包即可完成!请大家有问题的话,多多评论留言!