Windows下的Matlab与Java的混合编程,Java调用matlab编译的jar包(linux下请看我另外版本!)
近来因为甲方需要做拟合等功能,需要用到matlab软件,并将其功能在java中实现,然后在服务器上也要实现,因为之前根本没有听说过,所以我苦心泣血,狂干一星期找到了,踩了无数个坑,终于实现了,因此想分享给大家!
目录
一、Windows下java调用matlab
1、Matlab安装
2、Matlab中打jar包(基于R2018b版本,但是R2020以下都适用)
可能遇到的问题!!!
3、在java中使用matlab生成的jar包
一、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包即可完成!请大家有问题的话,多多评论留言!
Windows下的Matlab与Java的混合编程,Java调用matlab编译的jar包(linux下请看我另外版本!)相关推荐
- c 使用matlab引擎,[转载]C与MATLAB混合编程之调用MATLAB引擎
Visual Studio调用MATLAB需要的配置已经在<Visual Studio调用MATLAB的配置>一文中给出了详细的步骤,本文将介绍混合编程的示例. 在C中调用MATLAB,据 ...
- c 与matlab混编,C与MATLAB混合编程之调用MATLAB引擎
Visual Studio调用MATLAB需要的配置已经在<Visual Studio调用MATLAB的配置>一文中给出了详细的步骤,本文将介绍混合编程的示例. 在C中调用MATLAB,据 ...
- linux双击运行jar包,linux下发布JAR包 并运行
虽然写起动shell的频率非常不高...但是每次要写都要对付一大堆的jar文件路径,新加jar包也必须要修改起动shell. 在网上找到一个挺好的通用shell脚本. 只需要修改一些配置变量,就可以用 ...
- 调用matlab混合编程,vc调用matlab的m文件混合编程(引擎方式)
// test.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #include #include #include /************* ...
- Matlab与C/C++混合编程 (基于Opencv库)
之前用过基于VS2018 与MATLAB2018a 混合编程(C++特性)(见https://blog.csdn.net/wwwoowww/article/details/83013801),奈何后来 ...
- 【转】matlab与C/C++混合编程——在Windows/Linux上调用Matlab编译的动态库文件
转自:matlab与C/C++混合编程--在Windows/Linux上调用Matlab编译的动态库文件_sinat_18131557的博客-CSDN博客 date version comments ...
- Matlab与C/C++混合编程接口及应用
http://www.cnblogs.com/lidabo/archive/2012/08/24/2654148.html 在参考文献基础上.补充和完善了. Matlab与C/C++混合编程接口及应用 ...
- Matlab与C/C++混合编程调用OpenCV
*************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com http:/ ...
- matlab与c 接口与混合编程,Matlab与C/C++混合编程接口及应用方法解析
1 引言 Matlab 是当前应用最为广泛的数学软件,具有强大的数值计算.数据分析处理.系统 分析.图形显示甚至符号运算等功能[1].利用这一完整的数学平台,用户可以快速实现十分 复杂的功能,极大地提 ...
- matlab和C/C++混合编程--Mex
最近的项目需要matlab和C的混合编程,经过一番努力终于完成了项目要解决的问题.现在就将Mex的一些经验总结一下,当然只是刚刚开始,以后随着学习的深入继续添加.首先讲讲写Mex的一些常规规定,然后我 ...
最新文章
- Redis队列的应用
- 怎么自学python自动化测试-学习自动化测试,如何学习Python语言?
- 【.Net Micro Framework PortingKit – 14】TinyCLR编译与测试
- HBase数据模型:rowkey timestamp 列族 cell
- 【海洋女神原创】谈谈静默安装
- android通用的UUID唯一标示符
- 使用CAtlRegExp正则表达式检查浮点数输入
- 牛津、剑桥、OpenAI联合发出AI预警《人工智能的恶意使用》
- spring电子书_不懂Spring就彻底放Java吧
- 苹果cmsv10精仿迅播影院2tu风格主题模板
- React 学习之路 (五)事件处理
- 泰坦尼克 数据集_数据分析(一):11招入门数据分析
- Bootstrap3.0学习第十二轮(导航、标签、面包屑导航)
- jar包转换为exe可执行文件
- fgo7.27服务器维护,【FGO日服】维护通知(7/12)
- 银行笔试题目汇总——综合能力测试
- android获取角速度,android dyrscope sensor 角速度传感器调试
- 基于android手机实时监控ipcam视频之一:RTSP
- Fraction分数类II
- HBuilderX代码提示失效解决方案
热门文章
- 图卷积神经网络笔记——第六章:(1)基于PyTorch的时序数据处理(交通流量数据)
- 在路上—Tinyfool的程序员生涯(大学篇)
- c语言中double sper是什么意思啊,C语言的文件操作的使用
- (一)Bentley(OBD)二次开发-建筑对象的构件结构
- python输入两个数字、输出和差积商_C语言程序设计:输入两个整数,计算并输出它们的和、积、差、商和余数各是多少?...
- 任意角的正弦怎么用计算机算,任意角的正弦函数、余弦函数的定义、
- 如何在MATLAB上使用GUP加速跑代码
- 如何搭建网站?第一步:建站准备
- 北川汉龙小学奇迹背后的真相
- 2020房地产顾客满意度调查