通过前面的讨论,我们使用MATLAB PCT工具与SymphonyDE进行集成,使得MAT- LAB可以借助Symphony DE这样的专业并行计算软件进行并行计算。
而像Hadoop这样的并行计算软件暂时没有像symexec这样的工具可以方便地与MAT- LAB集成。
幸运的是MATLAB提供了Java语言支持,用户可以通过其他的途径将MATLAB与Java工具集成使用。
1.在MATLAB中调用Java程序
从MATLAB5.3起,MATLAB就包含了Java运行环境。事实上在运行MATLAB时,我们有时会碰到Exception in thread"AWT-EventQueue-0"这样的出错信息,这是Java AWT窗体组件出错信息,这说明MATLAB本身窗体也采用Java编写。
可以使用命令查看Java运行环境的信息,如下所示:
通过输出结果,可以看出该MATLAB使用Java1.6。
MATLAB的Java编程接口主要能完成以下功能:
●在MATLAB环境下创建Java对象。
●使用Java语法或者MATLAB语法调用Java对象的方法。
●在Java对象和MATLAB之间交互数据。
(1)创建Java对象
用户可以直接将Java对象赋值给MATLAB变量来创建Java对象,通过创建java.lang.System.out对象,就可以在MATLAB中方便地使用java输出对象,如下所示:
(2)添加更多的Java类库
上面的例子中可以使用java.lang.System.out类库说明MATLAB Java运行环境中包含Ja-va标准库。用户可以使用javaclasspath命令查看当前所使用的Java类库,还可以通过javaaddpath和javarmpath命来添加和删除Java类库。
(3)类型转换
MATLAB本身支持基本的Java数据类型与MATLAB数据类型的转换,比如将一个字符串转换为浮点数,如下所示。
MATLAB会自动将java对象转化的浮点数转换为MATLAB浮点数。
(4)在MATLAB中使用Java语言的好处
有很多用户,特别是科研机构的研究人员、算法分析师等,他们很熟悉MATLAB这样的开发环境,基于MATLAB的集成计算环境更便于他们使用,并且还易于与使用Java开发的并行计算工具集成。
(5)问题
虽然在MATLAB中可以调用Java程序,通过编写Java程序实现计算(比如与Hadoop集成),但是核心算法不能使用MATLAB的函数库。为了解决这个问题,MATLAB提供了一套算法库生成工具,可以在Java中调用MATLAB所写的库函数。
2.在Java中调用MATLAB程序
从MATLAB 2006开始,MATLAB支持将m文件中的算法转换为Java库文件。组件Jav-abuilder安装在C:\Program Files\MATLAB\R2010b\toolbox\javabuilder。(www.xing528.com)
(1)创建部署工程
在MATLAB的command窗口,输入deploytool,或依次单击file→new→deployment pro-ject菜单项会弹出一个新窗口,如图9-11所示。
图9-11 创建部署工程
在Target下拉菜单中选择Java Package,将会生成Java库文件。
(2)定义所要生成的类
在本章开始的时候,我们在MATLAB中使用蒙特卡罗算法实现了一个计算圆周率的应用。并将它保存在getpi.m文件中,现在可以使用工具将它封装为Java类。
如图9-12所示,在Deployment Tool窗口中,单击Addclass按钮,添加一个新类Mat-labPI,并单击Add files按钮将getpi.m文件添加给类MatlabPI。这样,MATLAB中的方法getpi将生成为类MatlabPI中的方法。
图9-12 设置Java库生成配置
单击build按钮将自动生成Java库文件。
也可以通过命令行生成,如下所示。
成功生成库文件后,可以在工程目录的distrib文件夹下找到库文件,同时还有说明文件和类使用文档,如图9-13所示。
图9-13 成功生成库文件后的工程目录结构
(3)在Java中调用MATLAB库文件
MATLAB中生成的库文件matlabproj.jar除了包含经常需要的方法外,还调用了很多MATLAB的内部类。
故需要将javabuilder.jar(存放在C:\Program Files\MATLAB\R2010b\toolbox\javabuilder\jar)与matlabproj.jar都加入到Java工程中,如图9-14所示。
图9-14 调用MATLAB库Java项目配置
详细调用代码如代码清单9-7所示。
【代码清单9-7】
通过上面的步骤,用户可以将MATLAB与更多的Java并行开发工具进行集成。这里只给出方法,具体与哪种并行计算软件集成(比如Hadoop)还是要由读者自行完成。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。