使用Java调用Matlab算法程序的方法有多种,在这里介绍一种在实际平台开发中较为方便做法:将MATLAB脚本程序打jar包,再使用Java程序调用。

一、处理MATLAB脚本

1.处理算法程序脚本,将其封装为函数形式

SpringBoot项目开发人员不一定也同时负责MATLAB算法程序的编写,而是使用已有的MATLAB算法程序。因此,在拿到MATLAB算法程序后,大概率应该要对算法程序脚本进行处理,将其写成方法体、也就是函数的形式。

首次拿到的MATLAB算法程序,是以程序流的形式编写的,运算后工作区中可以看到所有变量的值,包括输入值、中间变量、结果值。如下图所示:

拿到以上算法程序后,首先检验其是否能正常运行,然后根据需要将输入参数和输出结果值的变量名找到,使用function end将算法程序包裹起来,形成方法体(函数)程序。如下图所示。

其中,function后方括号中的参数为所需的结果值,等号后的“danji”为自定义的方法名,方法名后小括号中内容为方法所需的输入参数。
注意:如果程序开头有clear,clc命令,需要在写成方法体后将其注释或删除,避免该命令运行后将传入的输入参数清空。
在改写方法体时,可以首先不设置输入参数,而是在源程序相应位置写成固定的参数值,以便检验改写为方法体后,程序是否能正常运行。
改写成方法体后,运行程序,工作区中不再会出现中间变量,输入参数的内容。成功运行后,可以加上输入参数。

2.将方法体算法程序打成jar包

这一操作相对简单,只需要注意以下几个细节即可:

  • 版本匹配与兼容的要求:经过查询资料和实际使用测试,电脑环境是JDK1.8,则对应MATLAB2017b版本,如版本不对应,则打包时会报错。
    查看本地计算机中MATLAB对应的JDK版本方式如下:
    在命令行中输入
version -java


这里显示MATLAB内置的JDK版本为1.8.0,只需要大版本一致即可,即JDK1.8。理论上也可以修改内置的JDK,有兴趣的同学可以自行探索具体操作,这里不展开。

  • 打包过程的注意事项:如果这编写算法程序的过程中引用了MATLAB库以及其他文件,则需要在打包工程中将其加入。打包过程如下:

    APP–>Library–>Java Package–>选择需要打包的.m文件–>根据需要修改类名–>在下方File required for your library to run 中添加第三方库和程序运行所需的其他文件–>点击右上角Package按钮
    等待打包,如有报错,可以自行百度查找原因。
    完成打包后,会在选定路径下,生成一个方法同名的文件夹,如下图所示:

    打开for_redistribution_files_only文件夹,即可看到完成打包的jar包。

二、在SpringBoot项目中引入MATLAB所需的jar环境包和算法程序包

在SpringBoot项目中引入MATLAB的jar包有两种方法,一种是将jar包放入本地maven仓库中,然后在pom配置文件中引入;另一种是在springBoot项目中的resource目录下新建一个lib文件夹,右键将其Add as library,项目便可以识别到里面的jar包。
考虑到在开发过程中,需要不断地调试程序,修改jar包,因此,选择建立lib文件目录的形式,将jar包添加进去。如下图所示。

注意,除了算法程序的jar包,还需要引入javabuilder,否则调用算法程序包时会报错,抛异常。因为是matlab打包的jar包,需要依赖matlab中的相关函数,所以要将javabuilder.jar包带上这个包需要到MATLAB软件安装路径下找到,然后复制到lib目录下。参考路径如下:

D:\Program_software\MATLAB_R2017b\toolbox\javabuilder\jar\javabuilder.jar

三、在Java中调用MATLAB算法,传入参数,接收结果

完成打包和导入后,可以进行下一步的调用操作。
java工程中调用matlab生成的函数时,输入类型必须是matlab中具有的类型
如:uint8、uint16、double、int16、single。这里以字符串举例,其他类型参数对应关系可自行查阅MATLAB相关技术文档。

实例说明:
输入参数为多个字符串,输出参数为一个矩阵和多个数值。
下面贴出写在测试类中的代码:

import com.mathworks.toolbox.javabuilder.MWException;
import com.mathworks.toolbox.javabuilder.MWNumericArray;
@Testpublic void test4(){//初始化matlab算法的类,MatlabDuojiyuce 打包时自己命名的类名MatlabDuojiyuce matlabDuojiyuce = null;//获取数据文件路径作为输入参数String file1="D:/studywork/File/file1.xlsx";String file2="D:/studywork/File/file2.xlsx";String file3="D:/studywork/File/file3.xlsx";String file4="D:/studywork/File/file4.xlsx";//调用matlab算法开始计算try {matlabDuojiyuce = new MatlabDuojiyuce();返回值为一个Object类型数组,按照预先写入的顺序可以取到结果Object[] result = matlabDuojiyuce.duoji(5,file1,file2,file3);// System.out.println("输入计算结果:");System.out.println("第一个输出结果:"+result[0].toString());System.out.println("第二个输出结果:"+result[1].toString());System.out.println("第三个输出结果:"+result[2].toString());System.out.println("第四个输出结果:"+result[3].toString());System.out.println("第五个输出结果:"+result[4].toString());//第一个输出值为数学矩阵,对其进行处理转换为java的数组MWNumericArray data = (MWNumericArray) result[0];System.out.println("矩阵转换结果data:"+data);int[][] resultData = (int[][]) data.toIntArray();System.out.println("原始结果:"+resultData);//这样输出的是字节码,遍历或取到单个,例如第一个可以取出来正常数值System.out.println("矩阵转换为java数组结果第一个数:"+resultData[0][0]);//然后根据需要自行对结果值进行处理即可。} catch (MWException e) {e.printStackTrace();}}

使用JAVA调用MATLAB算法程序方式——使用复杂算例进行完整说明,包括参数传递相关推荐

  1. java调用matlab 数组_JAVA调用matlab程序 输入输出数据转换

    JAVA调用matlab程序 输入输出数据转换 JAVA 程序调用 matlab函数(matlab导出jar包里的函数).JAVA解析matlab返回数据时,机器需要先安装matlab运行时环境 并 ...

  2. Java调用Matlab

    1 Java调用Matlab方法举例 ◆   将 Matlab 编写的 m 文件转化为 COM(Component Object Model) 组件,在 Java 程序中利用第三方工具包调用 com ...

  3. linux下java调用matlab程序,linux_java调用windows_matlab程序

    0 说明 本文为研究java和matlab的混合编程,进行了详细的测试和探索,以解决linux环境下java程序调用matlab程序的一个应用. linux端的环境 :(运行java程序并调用wind ...

  4. Java调用Matlab程序

    Java调用Matlab程序_Macrocell-CSDN博客_java调用matlab

  5. java调用matlab绘图

    环境: 系统:kali linux 2017 java: 1.8 matlab:R2016b idea:2016 1.编写matlab脚本: drawplot.m %画图 自定义函数drawplot ...

  6. Java和MATLAB混合编程,Java调用MATLAB代码

    大家可能像我一样,是MATLAB 2014a或者MATLAB 2015a或者更高,因此找不到java package. 大家可能看到其他博客配置matlab 2013版本的,所以在这里就记录下MATL ...

  7. JAVA调用Matlab代码(MATLAB 2014a)

    本人考虑到用java绘制图形以及实现一些计算效率不高,实现起来有些复杂.而利用MATLAB写好相应的计算函数,然后打包成jar包供Java调用,在某些情况下会更加方便.或者有些时候会涉及到使用Java ...

  8. 花了一天,解决java调用matlab

    鉴于labview做不了web(labview强项在于硬件仪器控制,可能也可以做web,还不会),虽然有web发布工具,但是基于远程前面板,最后效果都呈现在前面板上(涉及了跳转页面.matlab绘图等 ...

  9. Windows下的Matlab与Java的混合编程,Java调用matlab编译的jar包(linux下请看我另外版本!)

    近来因为甲方需要做拟合等功能,需要用到matlab软件,并将其功能在java中实现,然后在服务器上也要实现,因为之前根本没有听说过,所以我苦心泣血,狂干一星期找到了,踩了无数个坑,终于实现了,因此想分 ...

  10. JAVA 调用matlab

    前段时间摸索了java调用matlab东西,不说学的有多深,也算有结果了,达到目的了.也即用java程序可以调用matlab中函数了. 按顺序说吧,最开始肯定是下个matlab看看.下哪一个呢.开始下 ...

最新文章

  1. 以太坊钱包_最大的以太坊钱包币数量还在增加
  2. 8、clone使用和数组列表的copy
  3. 【计网】IP地址、子网掩码、网络号、主机号、网络地址、主机地址以及ip段/数字-如192.168.0.1/24是什么意思?
  4. php rsa验证签名,php利用openssl实现RSA非对称加密签名验证
  5. iframe的src怎么携带参数_三种传递gRPC动态参数方式的使用体验
  6. thinkphp mysql 中文 问号_thinkphp分页中文参数乱码解决
  7. python基础之玩转(变量赋值)
  8. cat 大众点评 mysql_大众点评-CAT监控平台
  9. 【第十篇】单点登录原理和JWT实现
  10. 在线超级外链发布工具
  11. 基于WDF的驱动开发
  12. 支付宝小程序、百度小程序、微信小程序、今日头条小程序技术分析
  13. vs2015 相关
  14. 如果不知道这4种缓存模式,敢说懂缓存吗?
  15. 看完这篇,你一定会打开谷歌搜索...
  16. [补充]上集 Ch. 19-12(AJAX)在ListView / GridView的「样版」里面,放置 UpdatePanel
  17. C PRIMER PLUS(第六版编程练习)7.12编程练习_7题
  18. 鼠标点桌面计算机图标闪,用鼠标点击桌面图标老闪动是怎么回事?
  19. 14-HBase的介绍、数据模型以及架构模型
  20. “不差钱”的蔚来,为何着急回港上市?

热门文章

  1. python与机械教育初探_《Python与机器人程序设计》
  2. TigerGraph集群安装
  3. pic单片机c语言 程序,单片机教程:PIC单片机C语言程序设计(一)
  4. 电机学重读(一)基础知识
  5. 深入浅出设计模式(C#/Java版)
  6. EVE上传Dynamips、IOL和QEMU镜像
  7. sqlserver200864位下载_SQL Server 2008 官方简体中文正式版
  8. win7 计算机定时关机脚本,w7系统定时关机命令如何设置_w7电脑怎样设置定时关机...
  9. 接触wxWindows
  10. eclipserunas里没有选项_在电脑浏览器里阅读某一微信公众号所有文章