Java调用Matlab
来源:互联网 发布:设计衣服软件 编辑:程序博客网 时间:2024/06/04 19:18
考虑到计算的各种情况,有些用Java代码实现的计算难免会显得不够高效。而利用MATLAB写好相应的计算函数,然后打包成jar包供Java调用,在某些情况下会更加方便。或者有些时候会涉及到使用Java调用MatLab展现一些二维三维图。因此用到Java调用MatLab。
一:注意事项
1、 MatLab的版本必须是2006b+(包括2006b或更高版本),因为只有在这些版本中才有MATLAB Builder for Java(也叫Java Builder)。
2、 运行机器上必须装有JRE 并且版本要和MatLab自带的jre 大版本保持一致(位数也要保持一致)(大版本一致既可,比如同是1.6,或者1.7即可)。
查看MatLab 自带JRE版本位数方法:在MatLab中Command Windows中输入 【version -java】 命令查看。如图所示:
这里是 1.6.0_17-b04 版本的JRE 并且为64位的。(注意:这里之所以是64位的,取决于您当初下载的MatLab安装包的位数。
3、验证系统jdk jre,系统首先装有Java环境(不在叙述)。 验证jdk,jre版本位数。打开cmd 输入命令 【java -version】 和 【javac -version】分别验证编译和运行版本。也许有读者会想,两个命令查看的结果肯定版本都一样,但是有些情况java和javac的版本还真不一样,比如安装了多个版本的jdk或者不同位数的jdk,如果是以安装的方式安装,那么java版本和位数是以最后一次安装保持一致,因为安装时,会把java.exe拷贝到系统目录一份(例如:win8中的c:/windows/system32)。虽然配置了java环境变量,但是如果java环境变量配置在了path变量值得最后方,由于系统目录配置在了最前方,以前方为准。因此会出现配置无效。照成了以上所说的情况,这种情况解决方法有两种(a、删除系统目录下的相关java文件,b、把java环境变量配置到Path的最前面)。
4:Eclipse中项目构建路径中JRE 同样需要和MatLab自带JRE版本和位数保持一致。如果高于MatLabJre版本,只显示matlab调用窗口,图像无法正常显示。如果读者发生这种情况,可以试着用这种方式解决。
5:如果你用的是AMD的处理器,不是intel的处理器,安装matlab后,可能不能运行,具体表现是,一打开就关闭了。解决办法其实也很简单,就是给你的机器新建立一个系统变量,变量名是BLAS_VERSION,变量值是D://MATLAB7//bin//win32//atlas_Athlon.dll(你的matlab安装地址)。
6:如果你要在没有安装matlab的机器上用java调用这些jar包,怎么办?也是可以的,不过,不过你要先在机器上安装matlab提供的MATLAB Compiler Runtime (MCR) ,它的安装文件在D:\program files\study\MATLAB\R2007b\toolbox\compiler\deploy\win32下(你的安装目录下)文件名MCRInstaller.exe。
二:调用基本步骤
1、 matlab版本是matlab2014a。在matlab中新建脚本,并命名为Plot。脚本如下:
%画图 自定义函数Plot 参数 x y function Plot(x, y) plot(x, y); %%使用matlab函数Plot()作图 grid on %网格显示 xlabel('X轴值') ylabel('Y轴值') title('Java调用MatLab作图例子')
2、命令行窗口输入"deploytool"命令,然后选择Library Compiler。
3、选择Java Package文件夹,然后导入Plot.m脚本函数,输入工程名Plot.prj,输入类名Plot,添加函数Plot.m,最后点击右上脚Package,进行编译打包。如下图:
4、新建Java工程,并且引用javabuilder.jar和刚刚生成的Plot.jar。javabuilder.jar位置在:E:\Program Files\MATLAB\R2013a\toolbox\javabuilder\jar\win64\javabuilder.jar,如下图:
5、java代码如下:
package com.iwhr.test;import com.mathworks.toolbox.javabuilder.MWArray;import com.mathworks.toolbox.javabuilder.MWClassID;import com.mathworks.toolbox.javabuilder.MWComplexity;import com.mathworks.toolbox.javabuilder.MWNumericArray;import Plot.Plot;public class JavaCallMatlab{ public static void main(String[] args) { MWNumericArray x = null; // 存放x值的数组 MWNumericArray y = null; // 存放y值的数组 Plot thePlot = null; // Plotter类的实例(在MatLab编译时,新建的类) int n = 20; // 作图点数 try { // 分配x、y的值 int[] dims = {1, n}; x = MWNumericArray.newInstance(dims, MWClassID.DOUBLE, MWComplexity.REAL); y = MWNumericArray.newInstance(dims, MWClassID.DOUBLE, MWComplexity.REAL); // 定义 y = x^2 for (int i = 1; i <= n; i++) { x.set(i, i); y.set(i, i * i); } // 初始化plotter的对象 thePlot = new Plot(); // 作图 thePlot.Plot(x, y); thePlot.waitForFigures(); } catch (Exception e) { System.out.println("Exception: " + e.toString()); } finally { // 释放本地资源 MWArray.disposeArray(x); MWArray.disposeArray(y); if (thePlot != null) thePlot.dispose(); } }}
6、编译运行效果:
http://m.blog.csdn.net/article/details?id=2471987
http://blog.sina.com.cn/s/blog_a9ca82260101e4lj.html
- 想用java调用matlab
- java调用matlab
- JAVA 调用matlab
- java调用matlab
- java调用matlab
- java调用matlab
- Java 调用Matlab 问题
- Java调用Matlab
- java调用matlab
- java调用matlab
- java 调用 matlab
- Java调用MATLAB函数
- Java调用Matlab
- Java调用Matlab
- java调用matlab
- Java调用MATLAB
- java 调用matlab
- Java 调用 matlab 程序
- 面试题(九)
- 事件驱动的简明讲解
- (9)桥接模式
- jsp fmt标签格式化Date时间
- leetcodeOJ 162. Find Peak Element
- Java调用Matlab
- 安装xshell5报错:丢失nslicense.dll
- SSLRobot:适用于HttpWatch的免费SSL / TLS测试工具
- 字符串倒叙输出
- 本地myeclipse运行正常 部署到Tomcat运行不了
- jquery 默认隐藏div,点击按钮显示,再次点击隐藏
- va_start和va_end使用详解
- 把数组排成最小的数
- C# Json 序列化与反序列化的简单演示