博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java调用Matlab程序
阅读量:7251 次
发布时间:2019-06-29

本文共 1651 字,大约阅读时间需要 5 分钟。

hot3.png

java调用Matlab程序解决问题实际上比较少见,因为

  1. 每进行一次计算就要启动一个matlab实例,导致程序运行缓慢
  2. 部署服务器时需要安装matlab运行环境,占据服务器空间

实际上有需要计算可以通过调用特定的jar包来实现,但如果找不到对应的jar包,必须使用Matlab来编写函数实现的话,就有必要了解一下java调用Matlab函数的过程。

下面就介绍一下java调用Matlab的过程(我使用的是MATLAB R2016a版本):

1、编写matlab程序并输出成jar

     编写好m文件后找到应用程序下的应用程序部署-->Libraray Complier

      174402_DX2U_2920923.png

       选择Java Package

        174533_g9HO_2920923.png    

        选择编写好的.m文件

        174819_6Cm6_2920923.png

        在下方的Class Name位置可以自己设定输出的类名

        150157_Wf9f_2920923.png

     选择Runtime downloaded from web(选择这一项的话如果你的OS上没有matlab runtime environment,会自动从网上下载)-->点击Package

        174922_fJR6_2920923.png

        选择路径后会出现

        175106_H3wH_2920923.png

        成功以后在输出的文件夹中的for_redistribution_files_only文件夹下就可以找到目标jar包

        175247_HLMw_2920923.png

2、在java中引入上一步输入的jar和javabuilder.jar,前者用于调用上一步编写的matlab函数,后者用于调用matlab的API,以实现向matlab程序传值

        引入jar包,其中javabuilder.jar可以在Matlab\toolbox\javabuilder\jar里找到

        175318_q35q_2920923.png

      java调用matlab函数,参数一般需要以矩阵的形式传输,使用的类为javabuilder.MWNumericArray,下面是一个矩阵的例子:

//new int[]{11,2}代表矩阵为11行2列的矩阵//MWClassID.DOUBLE代表矩阵中数为double类型,MWComplexity.REAL代表矩阵中是实数MWNumericArray f = MWNumericArray.newInstance				(new int[]{11,2}, MWClassID.DOUBLE, MWComplexity.REAL);

      然后对矩阵进行赋值,给矩阵赋值有三种方式:

/*方式一:通过set(int id,int value)方法进行赋值,矩阵编号为一列一列数  例如第一行第一列编号为1,第一行第二列的编号为行数+1*/f.set(1,8);f.set(12,1);/*方式二:通过set(int[] id,int value)方法进行赋值,id[]用一个数组代表value所在位置,例如{1,2}代表第一行第二列*/f.set(new int[]{1,2},5};/*方式三:通过setMatrix(MWNumericArray m,int[] value)方法进行赋值,注意传入的数组按列数!  先排完第一列的值,再接着排第二列的值*/f = setMatrix(f,new double[]{80,15,0,28,0,30,0,23,0,0,0});

      根据之前设定的类名创建函数对象,并且创建数组用于接收返回值

//创建求解对象MinCost minCostCal = new MinCost();//用于接收返回值Object[] result = null;

      调用函数定义的方法,注意根据编写的函数指定返回值的个数,然后依次输入在matlab中定义的函数的参数列表,例如:

151843_xDfy_2920923.png

//调用求解方法,第一个参数3代表3个返回值result = minCostCal.minCost(3,f,a,b,aeq,beq,staNum,busNum);

       最后对result数组进行处理即可。

最后说明一次,如果想把程序部署到服务器上,matlab是一个很糟糕的选择,应该尽量寻找可用的开源jar包。

转载于:https://my.oschina.net/pierrecai/blog/829641

你可能感兴趣的文章
1056. 组合数的和(15)
查看>>
Git基础教程(一)
查看>>
10.9原版安装盘制作方法
查看>>
css解决select下拉表单option高度的办法
查看>>
「洛谷P1198」 [JSOI2008]最大数 解题报告
查看>>
C# 里EF 对Mysql DB更新,乱码
查看>>
linux权限相关
查看>>
iOS - IM 即时通讯
查看>>
function的name属性
查看>>
【转载】Deep Belief Networks资料汇总
查看>>
三角螺旋阵 (代码)
查看>>
正则表达式匹配规则
查看>>
词语过滤
查看>>
10.包和访问权限
查看>>
跟我学算法-吴恩达老师的logsitic回归
查看>>
数字信号处理C语言(2) ------带高斯噪声的sin函数和组合sin函数
查看>>
css 梯形标签页
查看>>
理解数据点,自变量和因变量(参数和值)ChartControl
查看>>
机器学习数学基础总结
查看>>
[HP-UX]清空FIN_WAIT_2的连接
查看>>