zoukankan      html  css  js  c++  java
  • MyEclipse调用Matlab打包函数

    本文部分内容参考了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[]的初始化。

      

      

      

      

      

      

      

  • 相关阅读:
    超棒的jQuery矢量地图生成插件 JQVAMP
    签名一年过期 项目导入出现 红叉叉
    invalid commandline parameter: Files\Android\androidsdk\tools/emulatorarm.exe 错误
    线性布局 相对布局 参数
    触摸事件 按下 移动 弹起
    Activity service 通信
    android view的setVisibility方法值的意思
    TextView 支持 html 图片显示
    布局动态添加 相对布局
    存储数据 SharedPreferences
  • 原文地址:https://www.cnblogs.com/bkylry/p/5370400.html
Copyright © 2011-2022 走看看