Java调用Matlab程序

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值