matlab at java_Java调用Matlab实践

本文详细记录了如何将MATLAB函数plotsin导出为Java Jar包,并在CentOS Linux服务器上进行测试和使用的过程。包括MATLAB与Java版本的一致性要求,OpenGL库的安装,以及Java环境的配置。测试结果显示,MATLAB函数在Linux服务器上能够正常执行,不涉及图形界面的MATLAB函数可以成功移植。
摘要由CSDN通过智能技术生成

本帖最后由 jiangyb_matlab 于 2017-12-18 11:27 编辑

实验目的

把Matlab编写函数导出Java的Jar包,在没有GUI的Linux服务端使用。

经过试验发现:

(1) 在osx导出的jar包,在Linux下是可以使用的,因为matlab函数最终是被编译成为跨平台的ctf文件。

(2) Matlab和Matlab Runtime的版本必须严格相同,此外java的版本最好一致,比如编译环境是java8,运行环境也最好是java8。

(3) 到目前为止,在Linux下测试plot函数,目前尚未试验出结果,即使在GUI环境下也失败,主要是Java的JNI调用OpenGL出现很多问题,很难配置成功;不过好在,我们是做服务端开发的,不需要绘图,也不需要GUI。

1. 编写Matlab函数文件plotsin.m

function out=plotsin(first,step,last)

in=first:step:last;

out=sin(in);

end

2. 导出Jar Library

7ce664a5c7db69ad3dffd2d7b958f47d.png

image.png (168.55 KB, 下载次数: 1)

2017-12-18 11:26 上传

最终得到plotsin/for_redistribution_files_only/plotsin.jar

3. Centos下测试

(1) MCR安装

unzip MCR_R2017b_glnxa64_installer.zip

./install -mode silent -agreeToLicense  yes

(2) 设置环境变量

vi ~/.bashrc增加

export LD_LIBRARY_PATH=/usr/local/MATLAB/MATLAB_Runtime/v93/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v93/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v93/sys/os/glnxa64

(3) 安装opengl

yum install mesa-libGLw.x86_64

备注:

如果不安装opengl会报错误:

------------------------------------------------------------------------

std::terminate() detected at Sun Dec 17 10:54:48 2017

------------------------------------------------------------------------

Configuration:

Crash Decoding      : Disabled - No sandbox or build area path

Crash Mode          : continue (default)

Default Encoding    : UTF-8

GNU C Library       : 2.17 stable

Host Name           : localhost.localdomain

MATLAB Architecture : glnxa64

MATLAB Root         : /usr/local/MATLAB/MATLAB_Runtime/v93

MATLAB Version      : 9.3.0.713579 (R2017b)

Operating System    : Linux 3.10.0-693.11.1.el7.x86_64 #1 SMP Mon Dec 4 23:52:40 UTC 2017 x86_64

Processor ID        : x86 Family 6 Model 70 Stepping 1, GenuineIntel

(4) 安装jdk

jdk的版本最好严格匹配(大版本号、64位或),在matlab命令行中允许version -java,找到响应的jdk版本,然后oracle官网下载指定的版本。

安装完毕设置环境变量:

export JAVA_HOME=/home/jiangyb/apps/java/jdk1.8.0_121

export PATH=$PATH:$JAVA_HOME/bin

(5) 测试用例

import plotsin.*;

public class Main {

public static void main(String[] args) {

try {

// System.setProperty("java.library.path","/Applications/MATLAB_R2017a.app/runtime/maci64/libmwmclmcrrt");

PlotClass plot = new PlotClass();

Object [] result=plot.plotsin(1, -2*Math.PI, 0.1f, 2 * Math.PI);

System.out.println(result.length);

} catch (Exception e) {

e.printStackTrace();

}

}

}

(6) 编译

javac -cp /usr/local/MATLAB/MATLAB_Runtime/v93/toolbox/javabuilder/jar/javabuilder.jar:lib/plotsin.jar -d bin/ src/Main.java

备注:这里的lib/plotisn.jar就是刚才导出的jar包。/usr/local/MATLAB/MATLAB_Runtime/v93/toolbox/javabuilder/jar/javabuilder.jar则是安装完毕运行的jar包目录。

(7) 运行

java -cp bin:/usr/local/MATLAB/MATLAB_Runtime/v93/toolbox/javabuilder/jar/javabuilder.jar:lib/plotsin.jar  Main

(8) 输出结果

1 至 7 列

-6.2832   -6.1832   -6.0832   -5.9832   -5.8832   -5.7832   -5.6832

8 至 14 列

-5.5832   -5.4832   -5.3832   -5.2832   -5.1832   -5.0832   -4.9832

15 至 21 列

-4.8832   -4.7832   -4.6832   -4.5832   -4.4832   -4.3832   -4.2832

22 至 28 列

-4.1832   -4.0832   -3.9832   -3.8832   -3.7832   -3.6832   -3.5832

29 至 35 列

-3.4832   -3.3832   -3.2832   -3.1832   -3.0832   -2.9832   -2.8832

36 至 42 列

-2.7832   -2.6832   -2.5832   -2.4832   -2.3832   -2.2832   -2.1832

43 至 49 列

-2.0832   -1.9832   -1.8832   -1.7832   -1.6832   -1.5832   -1.4832

50 至 56 列

-1.3832   -1.2832   -1.1832   -1.0832   -0.9832   -0.8832   -0.7832

57 至 63 列

-0.6832   -0.5832   -0.4832   -0.3832   -0.2832   -0.1832   -0.0832

64 至 70 列

0.0168    0.1168    0.2168    0.3168    0.4168    0.5168    0.6168

71 至 77 列

0.7168    0.8168    0.9168    1.0168    1.1168    1.2168    1.3168

78 至 84 列

1.4168    1.5168    1.6168    1.7168    1.8168    1.9168    2.0168

85 至 91 列

2.1168    2.2168    2.3168    2.4168    2.5168    2.6168    2.7168

92 至 98 列

2.8168    2.9168    3.0168    3.1168    3.2168    3.3168    3.4168

99 至 105 列

3.5168    3.6168    3.7168    3.8168    3.9168    4.0168    4.1168

106 至 112 列

4.2168    4.3168    4.4168    4.5168    4.6168    4.7168    4.8168

113 至 119 列

4.9168    5.0168    5.1168    5.2168    5.3168    5.4168    5.5168

120 至 126 列

5.6168    5.7168    5.8168    5.9168    6.0168    6.1168    6.2168

1

好了,总算调试通过了,下一步我准备在OSGi环境下使用。我们目前的分布式计算是基于OSGi环境的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值