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文件:
- function drawplot(x, y)
- 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();
      }
   }
}
运行程序,结果如图:

 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号