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[]的初始化。

  

 

  

  

  

  

  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM