最近做一个项目,需要很多进行很多信号处理——小魏就是学软件的,对信号处理简直是个小白,最简单的实现就是傻瓜似的调用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文件:

  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类文件的代码为:

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

运行程序,结果如图:

最新文章

  1. Python-面向对象(类)一
  2. 深入C#内存管理来分析值类型&amp;引用类型,装箱&amp;拆箱,堆栈几个概念组合之间的区别
  3. http的500,502,504错误
  4. Qt报表控件NCReport教程:添加报表字段
  5. 使用git推送代码到开源中国以及IDEA环境下使用git
  6. hdu 2275 Kiki &amp; Little Kiki 1
  7. Html5 常见的新增API详解
  8. nutch-2.2.1 hadoop-1.2.1 hbase-0.92.1 集群部署
  9. 深入浅出Java并发包—锁机制(二)
  10. 开源CMS的忠实粉丝——We7
  11. Cocos2dx 学习笔记整理----在项目中使用图片(二)
  12. Python3中urllib详细使用方法(header,代理,超时,认证,异常处理) 转
  13. Windows 性能搜集【perfmon】
  14. 【JDK1.8】JDK1.8集合源码阅读——Set汇总
  15. Web/app端自动化测试对比
  16. JavaScript复制文本探究
  17. 华大单片机开发板HC32F030上手入门
  18. python 基本运算符
  19. rook 排错记录 + Orphaned pod found kube-controller-manager的日志输出
  20. Win7 x64 svn 服务器搭建

热门文章

  1. ThinkPHP无法打开或点击不了Trace的问题
  2. 43. Multiply Strings (JAVA)
  3. UIAlertView, UIAlertViewController
  4. Effective C++条款05:了解C++默默编写并调用哪些函数
  5. SweetAler弹框插件与分页器插件
  6. 对Lockr的初步认识
  7. linux运维、架构之路-Git+Jenkins实现自动化部署
  8. 在 centos7.5 使用 DockerFile 构建镜像时报错 &quot;Error parsing reference:&quot;microsoft/dotnet:2.2-aspnetcore-runtime AS base&quot;is not a valid repository/tag: invalid reference format&quot;
  9. ASCII 、UTF-8、Unicode编码
  10. 批量下载文件web