关于在JAVA中调用MATLAB文件

最近在写一个项目,对于矩阵的操作等等要求非常高,与Java相比,使用MATLAB编写算法具有非常明显的优势,然后我就在尝试直接在Java中调用MATLAB的程序

对MATLAB函数的编写以及打包

首先就是对MATLAB函数进行编写,这里如果想要在Java中向MATLAB传参,我们就要把MATLAB程序写成方法体的形式,也就是函数。
在MATLAB中这样定义函数
function [输出形参表] = 函数名(输入形参表)
最后要以end结尾
所以把MATLAB程序包装成函数只需要代入这个框架即可
就像这样

function [c] = sumTest(a,b)
c = a + b
end

这样一个简单的函数就写好了
下面我们就需要把这个函数打包
打包首先要解决的就是版本匹配的问题,就是要保证MATLAB的jdk版本和系统的保持一致
获取MATLAB的jdk信息,可以在MATLAB命令行下输入:version -java
关于在JAVA中调用MATLAB文件_第1张图片
查看系统的jdk版本信息,可以在桌面Windows+r -> cmd
然后敲入java -version
关于在JAVA中调用MATLAB文件_第2张图片
如果不匹配就要更改系统的环境变量了,很多博主都有写过,这里我只放个网址就不写了吧其实是因为我懒
传送门

然后我们就可以进行MATLAB程序的打包了,在MATLAB命令行窗口下输入:deploytool
会弹出这样一个窗口,我们选择第三个Library Compiler
关于在JAVA中调用MATLAB文件_第3张图片
如果这里的deploytool功能无法使用,应该是下载MATLAB的时候没有选择勾选此工具箱,参阅MATLAB工具箱安装步骤安装MATLAB Compiler toolbox就可以了
关于在JAVA中调用MATLAB文件_第4张图片
首先在TYPE那里选择Java Package,其次在后面加号那里选择我们要打包的MATLAB程序,然后会看到下面有一个Class Name,这个名字就是我们之后导入jar后可以使用的类名,同样后面的Method Name就是可以使用的方法名。最后点击Package就可以了
储存MATLAB代码的路径一定要保证不能出现中文,否则可能会打包不成功,打包完成后会出现这样的窗口
关于在JAVA中调用MATLAB文件_第5张图片
同时还会弹出打包完成的后包里面的内容,就像这样,我们需要导入的jar包在第二个文件夹中
关于在JAVA中调用MATLAB文件_第6张图片
关于在JAVA中调用MATLAB文件_第7张图片

到这里,打包的工作就完成了

在IDEA中导入jar包并且运行函数

首先我们就要在IDEA中,新建一个项目,然后点击
File -> Project Structure -> Libraries,点击加号选择第一个Java就可以导入我们打包好的程序
关于在JAVA中调用MATLAB文件_第8张图片
注意这里因为是matlab打包的jar包,需要依赖matlab中的相关函数,所以还需要导入一个javabuilder.jar,用上面同样的方法导入
路径是toolbox -> javabuilder -> jar
导入好之后是这样的
关于在JAVA中调用MATLAB文件_第9张图片

接下来就是Java代码的编写了
初始化一个类(matlab打包时的那个类),通过类调用你写在.m文件中的那个方法,如果有参数,记得为它传入所需参数。如果有输出参数,使用一个Object类来接收。
这里的i表示输出参数的数量,后面是要传入的参数
在这里插入图片描述
使用MATLAB程序时,经常会输出计算得到的矩阵,但Java类没有矩阵,所以需要进行转换
下面代码可以把输出的矩阵转换成数组

MWNumericArray data = (MWNumericArray) result[0];
System.out.println(data);

这样就完成了,撒花撒花
为了这个项目我真的是忙活好久啊呜呜呜

你可能感兴趣的:(matlab,java,开发语言)