MATLAB 编译为Java Package

相比java等语言,MATLAB在矩阵计算等方面可太强大了。要是java能直接调MATLAB就好了。

确实可以!机缘巧合之下,发现了这个思路,折腾了好几天。

(有些不足的就是其调用开销比较大,目前还不知道如何合理的调用,)

后面了解到,一个处理方法是,先将matlab转为C,再转为Java,这样可以避免java在每次调用函数时需要与Matlab环境进行通讯导致效率低下的问题。(也许不能算通讯,数据交换?)——2022/03/20

MATLAB 编译

脚本编写

编写一个MATLAB函数脚本,这里我以绘图函数为例。

% 自定义画图函数drawplot.m
% 以两个1*n的矩阵为x,y坐标绘制一段线
% 参数 x y  
function drawplot(x, y)    
plot(x, y, 'r'); %%使用matlab函数plot()作图      
xlabel('X轴')  
ylabel('Y轴') 
end

另外还有一个drawplot2Line.m用于输出两条线(红+蓝)

打包

  1. 在MATLAB命令行窗口输入deploytool,打开部署工具
    MATLAB Compiler窗口1

  2. 选择 Library Compiler

  3. 添加脚本并配置
    MATLAB Compiler 窗口2

    1. 选择导出类型(我选择Java Package)
    2. 选择要转换的脚本文件(可导入多个)
    3. 导出的包名
    4. 在jar包中要生成的类以及类内方法(类名可自定义)
    5. 是否一起打包MATLAB运行环境MCR(默认不打包,自行从网上下载)
    6. 打包
  4. 等待打包完成

  5. 生成的共有三个文件夹,其中包含导出的jar包和javadoc文档

    • for_redistribution
    • for_redistribution_files_only
    • for_testing

    (三者有什么区别我也没有理解透,只要知道取出其中的包导入到java工程中就好)

Java调用

需要将上述方法导出的jar包以及MATLAB安装目录下的\toolbox\javabuilder\jar\javabuilder.jar包一同导入到Java工程中。Java导入本地jar包我这里就不讲了。

对于矩阵数据,需要使用javabuilder.jar中提供的MWNumericArray进行传参。

输入

传递给MATLAB函数时,基本类型可以直接带入,矩阵需要使用MWNumericArray

常规的矩阵输入方式:

MWNumericArray input = null; // 用于保存输入矩阵
//方式一:
input = MWNumbericArray.newInstance(int, int[], MWClassID.DOUBLE, MWComplexity.REAL);
//参数1表示矩阵的维数,参数2表示各维的大小即几行几列,参数三表示数据类型,参数四表示实数或复数

//方式二:
double array[] = {
    3, 2, 4, 5 };//要计算的数
//int array[]={3,2,4,5};也是可以的。
input = new MWNumericArray(array, MWClassID.</
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值