使用Java程序调用MatLab

 考虑到计算的各种情况,有些用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变量值得最后方,由于系统目录配置在了最前方,以前方为准。因此会出现配置无效。照成了以上所说的

情况,这种情况解决方法有两种(1:删除系统目录下的相关java文件,2:把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,HOME -》 新建脚本 打开Editor窗口。脚本内容如下:

%画图 自定义函数drawplot 参数 x y
function drawplot(x, y)  
plot(x, y); %%使用matlab函数plot()作图  
grid on %网格显示
xlabel('X轴值')
ylabel('Y轴值')
title('Java调用MatLab作图例子')

2:在计算机某个目录建个存放MatLab脚本及其后期编译出的java文件。例如:桌面\mjTest。保存脚本到此文件夹下。保存后,

在mjTest文件夹下多了一个drawplot.m文件。

3:在MatLab下Command Window下输入 【deploytool】 命令,打开部署工具Deployment Tool。新建一个工程demo.prj,设置路径为mjTest

既可,类型选择Java Package 点击确定。这时MatLab右侧自动打开了java部署窗口。

4:在Build选项卡下点击 Add classes 添加一个名称为plotter的Class(java类,在后边java代码中会调用到)。

5:在plotter底下点击Add files,添加刚才mjTest下的drawplot.m文件。点击上图右上方位置的编译按钮(两个向下箭头的那个按钮)。

编译时间稍微有些长,耐心等待即可。

6:编译完成后,我们会在mjTest目录下看到了demo文件夹生成了。进入demo/distrib目录。如发现demo.jar。则可以进行下一步操作了。


7:打开Myeclipse或者eclipse等IDE工具

      新建JavaProject mjTest(项目名称随意),并且引用以下两个jar包

E:\Program Files\MATLAB\R2013a\toolbox\javabuilder\jar\javabuilder.jar(MatLab安装目录下)如果是64位,

选择

E:\Program Files\MATLAB\R2013a\toolbox\javabuilder\jar\win64\javabuilder.jar

以及刚刚生成的demo\distrib\demo.jar

新建ConnectMatLabTest.java:

package com.xiami.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 demo.plotter;

public class ConnectMatLabTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MWNumericArray x = null; // 存放x值的数组
		MWNumericArray y = null; // 存放y值的数组
		plotter 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 plotter();

			// 作图
			thePlot.drawplot(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();
		}
	}

}
运行此类既可看到效果(Run -》 javaapplication)

如下图所示:


三:调用matlab函数并返回计算结果

参照http://blog.sina.com.cn/s/blog_a9ca82260101e4lj.html

  • 15
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值