Java中使用MATLAB作圖


嘗試在Java中調用MATLAB!

1)實驗環境

機器中裝有Eclipse和Matlab,並配置好環境變量。

小魏裝的是Eclipse 3.7.1 和Matlab7.11.0 (R2010b)。當然要裝有JDK,Eclipse的配置不多說了,網上有許多,至於Matlab,最好在classpath中添加:

%matlabInstallRoot%\R2010b\toolbox\javabuilder\jar\javabuilder.jar

這里說“最好”,是因為不添加,只在項目中引用,貌似也是可行的。

P.S. 如果是VC++中調用MATLAB,一定要在path中添加:

%matlabInstallRoot%\R2010b\bin\win32

2)將Matlab的m文件包裝成java類

  這里我們使用Matlab自帶的例子,在路徑

%matlabInstallRoot%\R2010b\toolbox\javabuilder\Examples\PlotExample

下,此處是m文件:

 

  1. function drawplot(x, y)  
  2. plot(x, y); %%使用matlab函數plot()作圖  
function drawplot(x, y)
plot(x, y); %%使用matlab函數plot()作圖

 

在MATLAB中Command窗口中輸入deploytool調出部署工具DeploymentTool。新建一個工程,輸入工程名plotdemo.prj,選擇路徑,並選擇Target為 Java Package。

 

在MATLAB右側會出現我們新建的工程。

將剛剛編寫的m文件直接拖拽進去,並重命名類名為plotter,點擊Build編譯:

 

完成之后(過程有點長~)就會在我們選擇的路徑下看到 plotdemo的文件夾。

3)在java工程中調用matlab生成的類

新建工程TryMatlabPlot,並右鍵在Build Path中引用相關的包

%matlabInstallRoot%\R2010b\toolbox\javabuilder\jar\jarbuilder.jar

以及剛剛生成的plotdemo\distrib\plotdemo.jar

Java類文件的代碼為:

package lwei.test.matlab;

import com.mathworks.toolbox.javabuilder.*;
import plotdemo.*;

/***
 * 通過調用matlab中的函數在窗口中作圖
 * @Author: lwei
 */
class createplot
{
   public static void main(String[] args)
   {
      MWNumericArray x = null;   //存放x值的數組
      MWNumericArray y = null;    //存放y值的數組
      plotter thePlot = null;    //plotter類的實例
      int n = 20;                //作圖點數

      try
      {
        //分配x、y的值
         int[] dims = {1, n};
         x = MWNumericArray.newInstance(dims,
            MWClassID.DOUBLE, MWComplexity.REAL);
         y = MWNumericArray.newInstance(dims,
            MWClassID.DOUBLE, MWComplexity.REAL);

         //定義  y = x^2
         for (int i = 1; i <= n; i++)
         {
            x.set(i, i);
            y.set(i, i*i);
         }

         //初始化plotter的對象
         thePlot = new plotter();

         //作圖
         thePlot.drawplot(x, y);
         thePlot.waitForFigures();
      }

      catch (Exception e)
      {
         System.out.println("Exception: " + e.toString());
      }

      finally
      {
         //釋放本地資源
         MWArray.disposeArray(x);
         MWArray.disposeArray(y);
         if (thePlot != null)
            thePlot.dispose();
      }
   }
}

package lwei.test.matlab;

import com.mathworks.toolbox.javabuilder.*;
import plotdemo.*;

/***
 * 通過調用matlab中的函數在窗口中作圖
 * @Author: lwei
 */
class createplot
{
   public static void main(String[] args)
   {
      MWNumericArray x = null;   //存放x值的數組
      MWNumericArray y = null;    //存放y值的數組
      plotter thePlot = null;    //plotter類的實例
      int n = 20;                //作圖點數

      try
      {
        //分配x、y的值
         int[] dims = {1, n};
         x = MWNumericArray.newInstance(dims, 
            MWClassID.DOUBLE, MWComplexity.REAL);
         y = MWNumericArray.newInstance(dims, 
            MWClassID.DOUBLE, MWComplexity.REAL);

         //定義  y = x^2
         for (int i = 1; i <= n; i++)
         {
            x.set(i, i);
            y.set(i, i*i);
         }

         //初始化plotter的對象
         thePlot = new plotter();

         //作圖
         thePlot.drawplot(x, y);
         thePlot.waitForFigures();
      }

      catch (Exception e)
      {
         System.out.println("Exception: " + e.toString());
      }

      finally
      {
         //釋放本地資源
         MWArray.disposeArray(x);
         MWArray.disposeArray(y);
         if (thePlot != null)
            thePlot.dispose();
      }
   }
}

運行程序,結果如圖:


免責聲明!

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



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