本文部分内容参考了http://www.360doc.com/content/15/1103/16/1180274_510463048.shtml

  

一、检查Java环境

  对于已经装上JAVA环境的计算机,首先要确定一下装的环境是否与当前的Matlab builder for java版本相兼容,本文使用的Matlab版本是R2014a。

  在CMD.EXE中键入 :java -version

  如果出现图中信息则表示已经安装好了JAVA环境并且可以看到它的版本

  

  进一步在cmd中输入javac -version

  可以明确的获得版本信息

  

  现在获得了JAVA环境信息,再来看看在Matlab中是否对这个版本兼容,在MATLAB(使用的版本是2014a)里command window里输入version -java,得到了这样的结果

  

  可以看到二者是兼容的,这里如果两个版本号不同但是相差很近的话也是可以的。

二、编写Matlab函数并生成.jar包

  这里编写两个函数operation(a,b),和measureDim(c)两个函数,功能分别是返回a,b的四则运算,以及求一维数组c的维度

  operation.m

  function [sum,sub,mul,div] = operation(a,b)
  sum = a+b;
  sub = a-b;
  mul = a*b;
  div = a/b;
  end

  measureDim.m

  function dim = measureDim(a)
  dim = length(a);

  在命令行参数中键入deploytool

  弹出下面界面,选择"Library Compiler"

  

  进一步弹出下列界面  

  在1处选择要打包成的应用类型,这里选择“java package”,在2处添加类中的接口函数,在3处选择MCR插件的获取方式(无论选择哪种,事实上都会先考察电脑上是否已有MCR,没有再采用相应行动),在4处填写项目名称,继续向下看这个页面

  

  在5处修改类的名字,在6处添加运行类需要的其他函数,最好把m文件中调用的Matlab的函数都添加进来

  现在该设置的都差不多了

  点击页面上侧的"Setting"按钮,设定文件位置之后点击Package,生成相应文件

  在打包过程中出现了下面存在警告的界面

  点击log file查看是什么问题,发现文档中出现了这样的警告

  看网上其他网友的说法,这个警告无伤大雅,确实,后来在Myeclipse中调用生成的程序,并没有出现什么问题。(但是还是想知道怎么从根本上去掉这些警告,如果有路过的知道怎么办的大神求指点!)

三、在Myeclipse调用程序

  1、首先在工程中导入Matlab生成的JAR文件,并且找到MATLAB安装文件夹里的toolbox-->javabuilder-->jar-->javabuilder.jar,也把它导入到工程。

    编写测试代码如下,MyOperation是打包好的类,operation和measureDim是包含的两个函数

package java1revise;
import com.mathworks.toolbox.javabuilder.MWClassID;
import com.mathworks.toolbox.javabuilder.MWException;
import com.mathworks.toolbox.javabuilder.MWNumericArray;
import operation.MyOperation; public class testOperation { public static void main(String[] args) {
// TODO Auto-generated method stub
double a = 1;
double b = 2;
double[] c = {1,8,9}; Object[] inpara = new Object[2];//存放输入参数
Object[] operationRe = new Object[4];//存放输出结果
Object[] dimRe = null;//存放输出结果
MWNumericArray ma = new MWNumericArray(a,MWClassID.DOUBLE);
MWNumericArray mb = new MWNumericArray(b,MWClassID.DOUBLE);
MWNumericArray mc = new MWNumericArray(c,MWClassID.DOUBLE);
inpara[0] = ma;
inpara[1] = mb; try {
MyOperation aOpera = new MyOperation();
operationRe = aOpera.operation(4, ma,mb);
//operationRe = aOpera.operation(4, inpara);
dimRe = aOpera.measureDim(1, mc);
for(Object temp:operationRe)
System.out.println("运算结果: "+temp.toString());
System.out.println("维数:"+dimRe[0]);
} catch (MWException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

  运行结果:

  运算结果: 3
  运算结果: -1
  运算结果: 2
  运算结果: 0.5000
  维数:3

2、总结

  1、调用Matlab打包函数,需要导入打包生成的JAR文件以及javabuilder.jar

  2、在给Matlab生成函数传参数时,需要先将数据转换为MWNumericArray类型,以供Matlab识别

    3、再进一步将多个参数赋值给一个对象数组进行传参,或者直接输入参数也可以,程序中无论是operationRe = aOpera.operation(4, ma,mb)还是operationRe = aOpera.operation(4, inpara)中都是可以的。

  4、Matlab生成函数的返回值类型是Object[] ,过程中注意Object[]的初始化。

  

  

  

  

  

  

  

MyEclipse调用Matlab打包函数的更多相关文章

  1. IIR滤波器设计(调用MATLAB IIR函数来实现)

    转载请注明文章来源 – http://blog.csdn.net/v_hyx ,请勿用于任何商业用途         对于滤波器设计,以前虽然学过相关的理论(现代数字信号处理和DSP设计),但一直不求 ...

  2. VS2015调用matlab Plot函数

    最近经常采用Matlab仿真,然后C语言实现,最后需要将计算结果使用Qt的qwt或者matlab中的plot函数绘图. 因此想借用matlab的plot函数接口,使用VS2015来编写信号处理代码,最 ...

  3. (转)JAVA 调用matlab

    本文仅用于学习. 原文地址链接:http://blog.csdn.net/wannshan/article/details/5907877 前段时间摸索了java调用matlab东西,不说学的有多深, ...

  4. C++调用matlab编程

    C++调用Matlab,实在是不得已的方法.原文链接: http://kylen314.blog.com/2012/12/11/matlab_for_cplusplus/  这是个很善良的博客,只出现 ...

  5. java调用matlab函数

    如何将实验结果在matlab中可视化呢,下面使用java语言编程,调用matlab中的函数: 本人安装的是Matlab7.11.0 (R2010a)和 Eclipse 4.2 : 1)首先设置环境变量 ...

  6. WPF调用Matlab函数方法

    有的时候用C#写图像处理方法,比较费事,不如Matlab简单,但是Matlab又做不出WPF那样的好看界面,怎么办呢. 今天正好我要实现这个功能,就顺便写个小例子,给需要的人做个借鉴. 想要用WPF调 ...

  7. 【原创】Matlab.NET混合编程技巧之直接调用Matlab内置函数

                  本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新    Matlab和C#混合编程文章目录 :[目录]Matlab和C#混合编程文章目录 在我的上一篇文章[ ...

  8. opencv通过dll调用matlab函数,图片作为参数

    [blog 项目实战派]opencv通过dll调用matlab函数,图片作为参数                   前文介绍了如何“csharp通过dll调用opencv函数,图片作为参数”.而在实 ...

  9. Matlab.NET混合编程技巧之——直接调用Matlab内置函数(附源码)

    原文:[原创]Matlab.NET混合编程技巧之--直接调用Matlab内置函数(附源码) 在我的上一篇文章[原创]Matlab.NET混编技巧之——找出Matlab内置函数中,已经大概的介绍了mat ...

随机推荐

  1. Java基础知识系列——文件操作

    对文件进行操作在编程中比较少用,但是我最近有一个任务需要用到对文件操作. 对文件有如下操作形式: 1.创建新的文件(夹) File fileName = new File("C:/myfil ...

  2. [题解]洛谷月赛 Hello World(升级版)

    题目背景 T1答案要mod1000000007(10^9+7),请重新提交,非常抱歉! 一天,智障的pipapi正在看某辣鸡讲义学程序设计. 题目描述 在讲义的某一面,他看见了一篇文章.这篇文章由英文 ...

  3. WCF通过SVCUtil.exe生成客户端代理类和配置文件(转)

    WCF服务调用通过两种常用的方式: 1:一种是借助代码生成工具SvcUtil.exe或者添加服务引用的方式. 2:一种是通过ChannelFactory直接创建服务代理对象进行服务调用. 本文只针对通 ...

  4. redis 数据类型

    上一篇文章主要写了redis在linux下的安装,这里讲一下redis基本的数据类型,linux的数据类型比较丰富,主要有五种数据类型 .String 字符串类型 常用命令: 除了get.set.in ...

  5. jeasyui datagrid控件的一个小问题

    页面上用了datagrid,但今天把easyui更新到1.4.2以后出了个错,Cannot read property 'width' of null,以前用1.3.6的时候没有这个问题. 由于表格中 ...

  6. Windows10

    一.快速开机设置 我的电脑配置如图,装有VS2015 2010 OFFICE等常用开发工具,在线升级后开机速度并没有明显提升. 1.保证windows font cache service服务启动,3 ...

  7. gulp插件gulp-ruby-sass和livereload插件

    gulp-ruby-sass是gulp的一个插件,主要是用来实现sass编译,livereload插件主要是实现文件保存时浏览器自动刷新,避免了手动f5的频繁的操作 准备工作:chrome浏览器安装l ...

  8. Android 遮罩层效果

    (用别人的代码进行分析) 不知道在开发中有没有经常使用到这种效果,所谓的遮罩层就是给一张图片不是我们想要的形状,这个时候我们就可以使用遮罩效果把这个图片变成我们想要的形状,一般使用最多就是圆形的效果, ...

  9. $http服务和$location

    1.angular的$http服务跟jquery中的ajax很类似,用法如下: $http({ method : 'GET', url : 'data.php' }).success(function ...

  10. 深入浅出: Java回调机制(异步)

    一.什么是回调 回调,回调.要先有调用,才有调用者和被调用者之间的回调.所以在百度百科中是这样的: 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步调用. 回调 ...