java调用matlab

一、准备

    Matlab R2015b

    Eclipse Kepler Service Release 2

    Jdk 1.7


二、编写Matlab文件 myadd.m

% matlab实现简单的add函数供java调用
function out=myadd(n,a,b)
    out=a(n)+b(n);
end 

在matlab命令行输入deploytool进行打包选择library package



然后点击Package,漫长的等待(可能十分钟左右)

当编译打包完成后会在matlab目录下生成三个目录


在for_testing中选择addoperator.jar和javabuilder.jar,后者在matlab安装目录下toolbox->javabuilder->jar下


三、加入包到Eclipse工程中

    将上面的两个包加入到工程中(如果涉及到图形,还需要安装MCR,并将安装后mclmcrrt.dll放入环境变量中)


    写Java文件 TestAdd.java

package test;
import java.util.Scanner;

import addoperator.add;

import com.mathworks.toolbox.javabuilder.MWClassID;
import com.mathworks.toolbox.javabuilder.MWComplexity;
import com.mathworks.toolbox.javabuilder.MWException;
import com.mathworks.toolbox.javabuilder.MWNumericArray;

public class TestAdd {
	public static void main(String[] args) {
		MWNumericArray x=null;
		MWNumericArray y=null;
		Scanner in=new Scanner(System.in);
		int[] dims=new int[]{1,1};
		x=MWNumericArray.newInstance(dims, MWClassID.DOUBLE, MWComplexity.REAL);
		y=MWNumericArray.newInstance(dims, MWClassID.DOUBLE, MWComplexity.REAL);
		x.set(1, 1);
		y.set(1, 2);
		try {
			add a=new add();
			Object[] cObjects=a.myadd(1,x,y);
			System.out.println(x+" + "+y+" = "+cObjects[0]);
		} catch (MWException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			in.close();
			MWNumericArray.disposeArray(x);
			MWNumericArray.disposeArray(y);
		}
	
	}
}


四、结果



五、注意事项

    1.Matlab的jdk版本和环境变量中的jdk版本要保存一致,否则在第二步无法编译

    2.Matlab的位数和jdk的位数要保存一致,否则在第三步中找不到mclmcrrt.dll文件,java报错UnsupportLinkError

    3.Eclipse位数和jdk位数要保存一致,否则Eclipse无法启动,因为找不到jvm.dll文件

    4.Matlab不要选择R2013b,因为R2013b的mcc命令不好用,导致第二步无法编译或者破解不完全也不能使用mcc命令

    5.当前Matlab的版本和MCR的版本要对应一致,否则Java报错LinkageError


    之前看过一篇博客,是关于Java调用Matlab的输入输出的参数构造,感觉写的很好

详见 https://blog.csdn.net/linweidong2007/article/details/44497167

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值