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 这里说“最好”,是因为不添加,只在项目中引用,貌似也是可行的。

尝试在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();
      }
   }
}

运行程序,结果如图:

目录
相关文章
|
10月前
|
算法 Java
数学建模常用算法:人工鱼群算法(AFAS)求解二元函数最小值+限定x,y范围测试【java实现--详细注释+Matlab绘制小鱼游动过程】
数学建模常用算法:人工鱼群算法(AFAS)求解二元函数最小值+限定x,y范围测试【java实现--详细注释+Matlab绘制小鱼游动过程】
113 0
|
10月前
|
算法 Java
数学建模常用算法:粒子群算法(PSO)求解二元函数最小值+限定x,y范围测试【java实现--详细注释+Matlab绘制粒子群飞行过程】
数学建模常用算法:粒子群算法(PSO)求解二元函数最小值+限定x,y范围测试【java实现--详细注释+Matlab绘制粒子群飞行过程】
144 0
|
Java C# 决策智能
运筹优化学习09:一个示例带你入门如何使用C++、C#、Java、Python、Matlab调用Cplex(下)
运筹优化学习09:一个示例带你入门如何使用C++、C#、Java、Python、Matlab调用Cplex
运筹优化学习09:一个示例带你入门如何使用C++、C#、Java、Python、Matlab调用Cplex(下)
|
Java 测试技术 C#
运筹优化学习09:一个示例带你入门如何使用C++、C#、Java、Python、Matlab调用Cplex(上)
运筹优化学习09:一个示例带你入门如何使用C++、C#、Java、Python、Matlab调用Cplex
运筹优化学习09:一个示例带你入门如何使用C++、C#、Java、Python、Matlab调用Cplex(上)
|
Java
java调用matlab程序
<div class="markdown_views"> <p>在实际Java编程中,我们可能想要使用matlab编写一些复杂的数值计算算法,然后导入我们的java项目中调用。这首先需要我们matlab的jdk版本和java项目的jdk版本对应一致。想查看matlabjdk版本,可以在matlab命令行中输入<code>version -java</code>来查看,会看到类似
4249 0
|
Java
【Matlab编程】Matlab及Java小时钟
        一年前曾经用matlab的gui做了一个时钟,由于是直接用GUIDE和ActiveX控件写的,程序虽说有许多行,大多数都是自动生成的,自己写的只有十几行而已。
1110 0
使用Java、Matlab画多边形闭合折线图
  由于写论文要将“哈密顿回路问题(TSP)”的求解中间结果表示出来,查了一下使用程序画多边形图形。现在在总结一下,这个图是“由给定节点首尾相连的”闭合多边形。 1.使用matlab作闭合多边形图   没有找到直接画多边形的函数,只能是将各个点的坐标保存在数组中,将一个点与其相邻的点相连,并将最后一个点与第一个点连接。
1152 0
|
Java
Java调用MATLAB作图是的ERROR--MWEException
Exception: com.mathworks.toolbox.javabuilder.MWException: This component was created using a version of MATLAB Builder JA that is not compatible with the version of MCR that it is running against 自己在网上搜索了两天才解决了这个小问题。
1225 0
|
Java Android开发 存储
java 中调用 Matlab 的函数
一、matlab版本必须支持java 在command 模式下面运行deploytool,如果支持该命令即可使用   二、matlab中function的书写   %定义一个函数operation(a,b),求a与b的加减乘除运算,并返回结果 %函数定义function 输出变量列表[s,m,.
1029 0
|
1天前
|
安全 Java
java多线程(一)(火车售票)
java多线程(一)(火车售票)