Java中使用MATLAB作图 .

最近做一个项目,需要很多进行很多信号处理——小魏就是学软件的,对信号处理简直是个小白,最简单的实现就是傻瓜似的调用MATLAB的各种工具箱,达到目的就行。

同时,MATLAB是种解释性语言,执行效率比较低,不适用与通用编程平台,同时图形化编程也非常不方面,一举两得的是能在其他语言(VC++Java)程序中调用MATLAB编写的函数。

好,牛刀小试,尝试在Java中调用MATLAB!

1)实验环境

机器中装有Eclipse和Matlab,并配置好环境变量。

小魏装的是Eclipse 3.7.1 和Matlab7.11.0 (R2010b)。当然要装有JDK,Eclipse的配置不多说了,网上有许多,至于Matlab,最好在classpath中添加:

%matlabInstallRoot%R2010b oolboxjavabuilderjarjavabuilder.jar

这里说“最好”,是因为不添加,只在项目中引用,貌似也是可行的。

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

%matlabInstallRoot%R2010binwin32

2)将Matlab的m文件包装成java类

  这里我们使用Matlab自带的例子,在路径

%matlabInstallRoot%R2010b oolboxjavabuilderExamplesPlotExample

下,此处是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 oolboxjavabuilderjarjarbuilder.jar

以及刚刚生成的plotdemodistribplotdemo.jar

Java类文件的代码为:

  1. package lwei.test.matlab;  
  2.   
  3. import com.mathworks.toolbox.javabuilder.*;  
  4. import plotdemo.*;  
  5.   
  6. /*** 
  7.  * 通过调用matlab中的函数在窗口中作图 
  8.  * @Author: lwei 
  9.  */  
  10. class createplot  
  11. {  
  12.    public static void main(String[] args)  
  13.    {  
  14.       MWNumericArray x = null;   //存放x值的数组   
  15.       MWNumericArray y = null;    //存放y值的数组   
  16.       plotter thePlot = null;    //plotter类的实例   
  17.       int n = 20;                //作图点数   
  18.   
  19.       try  
  20.       {  
  21.         //分配x、y的值   
  22.          int[] dims = {1, n};  
  23.          x = MWNumericArray.newInstance(dims,   
  24.             MWClassID.DOUBLE, MWComplexity.REAL);  
  25.          y = MWNumericArray.newInstance(dims,   
  26.             MWClassID.DOUBLE, MWComplexity.REAL);  
  27.   
  28.          //定义  y = x^2   
  29.          for (int i = 1; i <= n; i++)  
  30.          {  
  31.             x.set(i, i);  
  32.             y.set(i, i*i);  
  33.          }  
  34.   
  35.          //初始化plotter的对象   
  36.          thePlot = new plotter();  
  37.   
  38.          //作图   
  39.          thePlot.drawplot(x, y);  
  40.          thePlot.waitForFigures();  
  41.       }  
  42.   
  43.       catch (Exception e)  
  44.       {  
  45.          System.out.println("Exception: " + e.toString());  
  46.       }  
  47.   
  48.       finally  
  49.       {  
  50.          //释放本地资源   
  51.          MWArray.disposeArray(x);  
  52.          MWArray.disposeArray(y);  
  53.          if (thePlot != null)  
  54.             thePlot.dispose();  
  55.       }  
  56.    }  
  57. }  
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();
      }
   }
}

运行程序,结果如图:

原文地址:https://www.cnblogs.com/Neil223/p/3471019.html