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\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();
- }
- }
- }
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();
}
}
}
运行程序,结果如图:
Java中使用MATLAB作图 .的更多相关文章
- Java中调用MatLab返回值
当在Java中使用MatLab函数时,由于语言语法的不同,Matlab返回多个数据时,想在Java中获取到并进行使用.查阅了网上资料,翻箱倒柜加上自己实战,得出方法如下: 如MatLab函数返回的是N ...
- 使用Java程序调用MatLab
Java代码实现的计算难免会显得不够高效.而利用MATLAB写好相应的计算函数,然后打包成jar包供Java调用,在某些情况下会更加方便.或者有些时候会涉及到使用Java调用MatLab展现一些二维三 ...
- 【转】Matlab作图语句小结
之前用Matlab作图,从网上找了些别人的例子,然后慢慢调参数.其实对很多命令,特别是对句柄不是很了解,今天简单总结了一下.下面用几个例子来说明: ]); 首先,gcf是当前figure对象 ...
- 小论文matlab作图技巧
小论文matlab作图技巧 编辑->复制选项 编辑->图形属性 图中右击->字型 编辑->复制图片,即可. 效果: 宽:5.9高: 7.91
- MATLAB作图方法与技巧(二)
作为MATLAB作图方法与技巧(一)的补充 1.绘制二维散点图 ① scatter函数 scatter(x,y,s,c)函数绘制向量x和y的散点图,其中s代表点的大小,c代表点的形状,s和c缺省时为默 ...
- MATLAB作图方法与技巧(一)
下面从折线图.曲面图和图形说明与定制三个方面说明MATLAB作图的一些方法与技巧,注意,文中出现的单引号在MATLAB中实际运行的时候,需要改为MATLAB认可的单引号. 一. 作折线图 1.plot ...
- java中的锁
java中有哪些锁 这个问题在我看了一遍<java并发编程>后尽然无法回答,说明自己对于锁的概念了解的不够.于是再次翻看了一下书里的内容,突然有点打开脑门的感觉.看来确实是要学习的最好方式 ...
- java中的字符串相关知识整理
字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...
- Java中的Socket的用法
Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...
随机推荐
- ASP.NET中数据库数据导入Excel并打印(2)
大家可能觉得上面的代码比较复杂,因为上面对于对打印要求比较高的应用,是十分有效的.如果只是单单对数据进行导出,还可以使用简单的格式,比如使用以下的代码: Private Sub Page_L ...
- mysql中的substring()截取字符函数
substring(参数1,参数2,参数3),其中三个参数分别表示:参数1表示需要截取的字符串,参数2表示从字符串的那个位置开始截取(字符串下标从1开始),参数3表示要截取多少位,如果不写,表示截取从 ...
- vue项目1-pizza点餐系统6-路由精讲之复用router-view
1.在主组件展示二级路由的组件内容,在App.vue中添加 <br> <div class="container"> <!-- row 行排列 --& ...
- 时间戳转换日期格式 - Vue
日常开发中经常会遇到时间相关的问题,服务端返回的数据都是以时间戳的方式,那么需要将其处理转化为对应的时间格式,具体方式如下: 一.filters 中 formatDate 方法实现 <scrip ...
- java封装小实例
封装是java语言的一个重要的特性,通过把对象的属性和操作方法封装在同一个类中,对外只提供公共方法对这些数据进行set和get,同时封装也能对方法进行封装.总之封装能够有效地隐藏内部的代码细节,从而使 ...
- <mvc:argument-resolvers> 自定义注解处理参数
直接看引自: http://blog.csdn.net/u013160932/article/details/50609092
- opencv python 图像二值化/简单阈值化/大津阈值法
pip install matplotlib 1简单的阈值化 cv2.threshold第一个参数是源图像,它应该是灰度图像. 第二个参数是用于对像素值进行分类的阈值, 第三个参数是maxVal,它表 ...
- Zabbix--06主动模式和被动模式、低级自动发现、性能优化、
目录 一. Zabbix主动模式和被动模式 1.克隆模版 2.修改克隆后的模版为主动模式 3.修改监控主机关联的模版为主动模式 4.修改客户端配置文件并重启 5.查看最新数据 二.Zabbix低级自动 ...
- Candidate Generation and LUNA16 preprocessing
在这个kernel中,我们将讨论有助于更好地理解问题陈述和数据可视化的方法. 我还将提供有用的资源和信息的链接. 此脚本是用Python编写的. 我建议人们在桌面上安装anaconda,因为here提 ...
- springboot+HttpInvoke 实现RPC调用
开始用springboot2+hession4实现RPC服务时,发现第一个服务可以调用成功,但第二个就一直报 '<' is an unknown code.第一个服务还是可以调用的.参考网上的方 ...