Java與Matlab混合程式設計

木小草發表於2016-03-16

Java與Matlab混合程式設計


注意:轉載請說明,來自轉自itboy-木小草尊重原創,尊重技術

環境要求

Matlab至少是2015a及以上版本,之前我用的2014b怎麼都不行,最後在http://www.matlabsky.com/上看到說是2014班沒有破解完全
java我用的1.7,應該沒什麼要求

matlab導jar包

寫好matlab之後,在控制檯打deploytool,選擇匯出jar包,起名字,選擇路徑什麼的,都很簡單,然後完成了還要等一會,就能得到jar包了。

使用Matlab的jar包

  1. 在java工程屬性的BuildPath中新增兩個jar包:

    matlabroot\toolbox\javabuilder\jar\javabuilder.jar
    TestDirectory\flying.jar

  2. 編寫函式示例如下

package test; 
/** 
* test for a Matlab Call 
*
*/ 
import com.mathworks.toolbox.javabuilder.*; 
import flying.*; 

public class testMatlabClass { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
        // TODO Auto-generated method stub 
        try { 
           System.out.println("Begin"); 
           flyingclass flyingDraw=new flyingclass(); 
           System.out.println("Middle"); 
           flyingDraw.mydraw(7,2); 
           System.out.println("Here"); 
        }catch (Exception e){
           System.out.println(e);
        } 
    } 
} 
  1. 如果不能正常執行,可以考慮在 classpath 中,加入 flying.jar 所在的位置。

詳細

  1. 參見 matlab 的幫助檔案

  2. http://www.simwe.com/forum/archiver/tid-747229.html

  3. 資料型別相關

Java 的數值型陣列,可以直接作為輸入引數傳遞到 .m 檔案上。

如:mydraw(x,y) ,可以畫x=[1 2 3 4] ,y=[3.3 -5 6 10.2]這樣的線圖。Java呼叫該方法時候,如果傳遞的引數是整型或者實數型陣列,則直接可成功。如java中:

int[] a = new int[4]; 
int[] b = new int[4]; 
// 給 a,b 賦值 …
// … 
// 呼叫 
flyingclass flyingDraw = new flyingclass(); 
flyingDraw.mydraw(a,b); 

注意:a,b 最好所有有索引的位置都有值,否則如果沒有充分賦值曲線可能會最終折回(0,0)點。

Matlab程式(.m檔案)的修改

  1. 找到TestDirectory\flying.jar所在的位置(因為按照上述步驟的話,.m原始檔就在該位置附近)。這個位置,從Eclipse的Package Explore可以用看到。

  2. 直接修改欲改動的.m檔案

  3. 開啟Matlab, 在Command輸入Deploytool, 在新開啟的部署皮膚中,“開啟”該m檔案所在的工程,如flying.prj。

  4. 選中相應工程下Class 資料夾下的.m檔案,點選工具欄的Build按鈕。

  5. 則相應原始檔被重新編譯。如果按照前面步驟新增的jar包,則編譯後新生成的jar包自動替換掉原有的jar。又由於這個jar的位置已經作為BuildPath告訴了java的相應工程,因此Java端不需要做任何調整即可正確呼叫到新修改了內容的matlab方法。

    注意:轉載請說明,來自轉自itboy-木小草尊重原創,尊重技術

相關文章