热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java调用matlab_使用Java程序调用MatLab

Java代码实现的计算难免会显得不够高效。而利用MATLAB写好相应的计算函数,然后打包成jar包供Java调用,在某些情况下会更加方便。或者有些时候会

Java代码实现的计算难免会显得不够高效。而利用MATLAB写好相应的计算函数,然后打包成jar包供Java调用,在某些情况下会更加方便。或者有些时候会涉及到使用Java调用MatLab展现一些二维三维图。因此用到Java调用MatLab。

一:注意事项

1: MatLab的版本必须是2006b+(包括2006b或更高版本),因为只有在这些版本中才有MATLAB Builder for Java(也叫Java Builder)。

2: 运行机器上必须装有JRE 并且版本要和MatLab自带的jre 大版本保持一致(位数也要保持一致)(大版本一致既可,比如同是1.6,或者1.7既可)

查看MatLab 自带JRE版本位数方法:在MatLab中Command Windows中输入 【version -java】 命令查看。如图所示:

e33e02cb1d48af5fbb33f9f5184678db.png

这里是 1.6.0_17-b04 版本的JRE 并且为64位的。(注意:这里之所以是64位的,取决于您当初下载的MatLab安装包的位数。

3:验证系统jdk jre,系统首先装有Java环境(不在叙述)。 验证jdk,jre版本位数。打开cmd 输入命令 【java -version】

和 【javac -version】分别验证编译和运行版本。也许有读者会想,两个命令查看的结果肯定版本都一样,但是有些情况java和javac

的版本还真不一样,比如安装了多个版本的jdk或者不同位数的jdk,如果是以安装的方式安装,那么java版本和位数是以最后一次安装

保持一致,因为安装时,会把java.exe拷贝到系统目录一份(例如:win8中的c:/windows/system32)。虽然配置了java环境变量,但是

如果java环境变量配置在了path变量值得最后方,由于系统目录配置在了最前方,以前方为准。因此会出现配置无效。照成了以上所说的

情况,这种情况解决方法有两种(1:删除系统目录下的相关java文件,2:把java环境变量配置到Path的最前面)。

无法正常显示。如果读者发生这种情况,可以试着用这种方式解决。

如 果你用的是AMD的处理器,不是intel的处理器,安装matlab后,可能不能运行,具体表现是,一打开就关闭了。解决办法其实也很简单,就是给你的 机器新建立一个系统变量,变量名是BLAS_VERSION,变量值是D://MATLAB7//bin//win32 //atlas_Athlon.dll(你的matlab安装地址)。

6:如果你要在没有安装matlab的机器上用java调用这些jar包,怎么办?也是可以的,不过,不过你要先在机器上安装matlab提供的MATLAB Compiler Runtime (MCR) ,它的安装文件在D:\program files\study\MATLAB\R2007b\toolbox\compiler\deploy\win32下(你的安装目录下)文件名MCRInstaller.exe。

二:调用基本步骤

1:打开MatLab,HOME -》 新建脚本 打开Editor窗口。脚本内容如下:

%画图 自定义函数drawplot 参数 x y

function drawplot(x, y)

plot(x, y); %%使用matlab函数plot()作图

grid on %网格显示

xlabel('X轴值')

ylabel('Y轴值')

title('Java调用MatLab作图例子')

2:在计算机某个目录建个存放MatLab脚本及其后期编译出的java文件。例如:桌面\mjTest。保存脚本到此文件夹下。保存后,

在mjTest文件夹下多了一个drawplot.m文件。

3:在MatLab下Command Window下输入 【deploytool】 命令,打开部署工具Deployment Tool。新建一个工程demo.prj,设置路径为mjTest

既可,类型选择Java Package 点击确定。这时MatLab右侧自动打开了java部署窗口。

c1a2faddd96a1a7f83c866ced80a5dd3.png

4:在Build选项卡下点击 Add classes 添加一个名称为plotter的Class(java类,在后边java代码中会调用到)。

5:在plotter底下点击Add files,添加刚才mjTest下的drawplot.m文件。点击上图右上方位置的编译按钮(两个向下箭头的那个按钮)。

编译时间稍微有些长,耐心等待即可。

6:编译完成后,我们会在mjTest目录下看到了demo文件夹生成了。进入demo/distrib目录。如发现demo.jar。则可以进行下一步操作了。

7:打开Myeclipse或者eclipse等IDE工具

新建JavaProject mjTest(项目名称随意),并且引用以下两个jar包

E:\Program Files\MATLAB\R2013a\toolbox\javabuilder\jar\javabuilder.jar(MatLab安装目录下)如果是64位,选择E:\Program Files\MATLAB\R2013a\toolbox\javabuilder\jar\win64\javabuilder.jar

以及刚刚生成的demo\distrib\demo.jar

c5f19a1d134dd7aef8a42351d2b14590.png

新建ConnectMatLabTest.java:

package com.xiami.test;

import com.mathworks.toolbox.javabuilder.MWArray;

import com.mathworks.toolbox.javabuilder.MWClassID;

import com.mathworks.toolbox.javabuilder.MWComplexity;

import com.mathworks.toolbox.javabuilder.MWNumericArray;

import demo.plotter;

public class ConnectMatLabTest {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

MWNumericArray x = null; // 存放x值的数组

MWNumericArray y = null; // 存放y值的数组

plotter thePlot = null; // plotter类的实例(在MatLab编译时,新建的类)

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 &#61; 1; i <&#61; n; i&#43;&#43;) {

x.set(i, i);

y.set(i, i * i);

}

// 初始化plotter的对象

thePlot &#61; new plotter();

// 作图

thePlot.drawplot(x, y);

thePlot.waitForFigures();

}

catch (Exception e) {

System.out.println("Exception: " &#43; e.toString());

}

finally {

// 释放本地资源

MWArray.disposeArray(x);

MWArray.disposeArray(y);

if (thePlot !&#61; null)

thePlot.dispose();

}

}

}

运行此类既可看到效果(Run -》 javaapplication)&#xff0c;如下图所示&#xff1a;

c674e092c7118bd2a7db5588383d4cb7.png

三&#xff1a;调用matlab函数并返回计算结果

如下&#xff1a;

考虑到计算的各种情况&#xff0c;有些用Java代码实现的计算难免会显得不够高效。而利用MATLAB写好相应的计算函数&#xff0c;然后打包成jar包供Java调用&#xff0c;在某些情况下会更加方便。现在就来说一下如何实现这一过程&#xff1a;

1.确定配置好了相应的环境

首先&#xff0c;要确定你电脑上装好了MATLAB并且配置好了Java的运行环境&#xff0c;注意&#xff0c;MATLAB的版本必须是2006b&#43;(包括2006b或更高版本)&#xff0c;因为只有在这些版本中才有MATLAB Builder for Java(也叫Java Builder)。

2.打包步骤

a)打开MATLAB(笔者用的是MATLAB 2012b&#xff0c;版本的一些差异我会在后面注明)&#xff0c;在Command Window框中输入deploytool&#xff0c;会跳出如下界面&#xff1a;

9966c1e78b93e083a1b101a773ed1035.png

26cd51c55825045cf9df3da7e8f4c6e7.png

可能在有些版本中选择Type时显示的是Matlab Builder for Java&#xff0c;并且在Deployment Tool面板中还有Generate Verbose Output选项框&#xff0c;勾选上它&#xff0c;针对不同的版本时可能有一些出入&#xff0c;大家多留心一些&#xff0c;自己多尝试尝试。

c)在MATALAB的Editor中新建一个m文件&#xff0c;这里编辑一个简单的加法函数add并保存:

68e8cd1c84a55d944f0a0559875d2d20.png

d)在MATLAB中找到Java Package窗口&#xff0c;添加class文件&#xff0c;命名这个class文件的时候要注意了&#xff0c;因为这个文件就是以后导入到Java中要作为一个对象的名字&#xff0c;也就是说它就是放在new后面作为构造函数的类名。这里命名为matlabAdd&#xff1a;

76d1b559abc9e6c96c623edb7b14ed6d.png

e)然后点类名下的Add files&#xff0c;将刚才编辑好的m文件add.m加到matlabAdd当中。

15b8c178fa8d310806ef870fad6b0457.png

f)接着就可以打包了&#xff0c;还是在Java Package窗口找到975a8a2427fee03f66dc983a009588db.png&#xff0c;点击就可以打包了。等打包好&#xff0c;就可以调用了。

3.调用打包好的matlab函数

a)在MATLAB安装的目录中找到"...\toolbox\javabuilder\jar\javabuilder.jar"的文件,并在你刚才打包的文件夹中找到对应的包&#xff0c;本例中是firstOne.jar&#xff0c;然后将这两个jar包导入到你的Java项目当中。

9093f3ac650d7cab989c13f84d3b077c.png

b)新建JAVA类文件MJBuilderTest.java&#xff0c;示例代码如下&#xff1a;

import com.mathworks.toolbox.javabuilder.*;

import myadd.*;

class MJBuilderTest

{

public static void main(String[] args)

{

MWNumericArray a &#61; null;

MWNumericArray b &#61; null;

Object[] result &#61; null;

Myadd myAdd &#61; null;

try

{

if (args.length !&#61; 2)

{

System.out.println("Error: must input 2 numbers!");

return;

}

a &#61; new MWNumericArray(Double.valueOf(args[0]),MWClassID.DOUBLE);

b &#61; new MWNumericArray(Double.valueOf(args[1]),MWClassID.DOUBLE);

myAdd &#61; new Myadd();

result &#61; myAdd.myadd(1, a, b);

System.out.print("/nThe sum of " &#43; a.toString() &#43; " and " &#43; b.toString() &#43; " is: ");

System.out.println(result[0]);

}

catch (Exception e)

{

System.out.println("Exception: " &#43; e.toString());

}

finally

{

MWArray.disposeArray(a);

MWArray.disposeArray(b);

MWArray.disposeArray(result);

if (myAdd !&#61; null)

myAdd.dispose();

}

}

}

c)在Eclipse中设置好输入参数输入窗口&#xff1a;Run as- Run configations-Arguments 选择 要输入的数据类型&#xff0c;这里选择的是“string_prompt”&#xff0c;点击应用。

d)编译执行MJBuilderTest.java&#xff0c;输入参数(2个参数用空格隔开)&#xff0c;例如&#xff1a;1 2 &#xff0c;如果配置正确&#xff0c;结果会显示

“The sum of 1 and 2 is: 3”



推荐阅读
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • 【Windows】实现微信双开或多开的方法及步骤详解
    本文介绍了在Windows系统下实现微信双开或多开的方法,通过安装微信电脑版、复制微信程序启动路径、修改文本文件为bat文件等步骤,实现同时登录两个或多个微信的效果。相比于使用虚拟机的方法,本方法更简单易行,适用于任何电脑,并且不会消耗过多系统资源。详细步骤和原理解释请参考本文内容。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文介绍了win7系统休眠功能无法启动和关闭的解决方法,包括在控制面板中启用休眠功能、设置系统休眠的时间、通过命令行定时休眠、手动进入休眠状态等方法。 ... [详细]
  • 解决github访问慢的问题的方法集锦
    本文总结了国内用户在访问github网站时可能遇到的加载慢的问题,并提供了解决方法,其中包括修改hosts文件来加速访问。 ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
  • 通过Anaconda安装tensorflow,并安装运行spyder编译器的完整教程
    本文提供了一个完整的教程,介绍了如何通过Anaconda安装tensorflow,并安装运行spyder编译器。文章详细介绍了安装Anaconda、创建tensorflow环境、安装GPU版本tensorflow、安装和运行Spyder编译器以及安装OpenCV等步骤。该教程适用于Windows 8操作系统,并提供了相关的网址供参考。通过本教程,读者可以轻松地安装和配置tensorflow环境,以及运行spyder编译器进行开发。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • DSP中cmd文件的命令文件组成及其作用
    本文介绍了DSP中cmd文件的命令文件的组成和作用,包括链接器配置文件的存放链接器配置信息、命令文件的组成、MEMORY和SECTIONS两个伪指令的使用、CMD分配ROM和RAM空间的目的以及MEMORY指定芯片的ROM和RAM大小和划分区间的方法。同时强调了根据不同芯片进行修改的必要性,以适应不同芯片的存储用户程序的需求。 ... [详细]
  • 本文介绍了Windows Vista操作系统中的用户账户保护功能,该功能是为了增强系统的安全性而设计的。通过对Vista测试版的体验,可以看到系统在安全性方面的进步。该功能的引入,为用户的账户安全提供了更好的保障。 ... [详细]
author-avatar
15-Sports
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有