java 中调用 Matlab 的函数

简介: 一、matlab版本必须支持java 在command 模式下面运行deploytool,如果支持该命令即可使用   二、matlab中function的书写   %定义一个函数operation(a,b),求a与b的加减乘除运算,并返回结果 %函数定义function 输出变量列表[s,m,.

一、matlab版本必须支持java

在command 模式下面运行deploytool,如果支持该命令即可使用

 

二、matlab中function的书写

 

%定义一个函数operation(a,b),求a与b的加减乘除运算,并返回结果

%函数定义function 输出变量列表[s,m,...] 函数名(输入变量列表)sum,sub,mul,div中

function [sum,sub,mul,div] = operation(a,b);

sum = a + b;

sub = a - b;

mul = a * b;

div = a / b;

end

 

PS:上面标红的部分与java中调用该operation的返回值有关系,在java中调用的 Object result[] = XXX.operation(4,a,b); 4表示有4个返回值,分别存放在result[0]到result[4]中。

 

三、使用matlab编译生成jar

在matlab命令窗口下输入 deploytool,就会弹出一个编译窗口,

然后点击,file,选择new-deployment project,

然后选择matlab builder jave。

name的地方填写工程名,

ocation填写该工程的存储位置。

点击ok。

然后,把m文件添加到工程中,先new一个class,这个class的名字就是你将来在java中需要new的class的名字,也就是matlab中operation所在的class名字然后将你的m文件添加到这个class目录下,然后直接build即可。

 

四、在java中使用matlab的函数

现在eclipse下面new一个新的java工程,然后将第三部build成功后产生的文件夹下面的distrib目录中的XXX.jar 以及你matlab安装目录下/toolbox/javabuilder/jar/javabuilder.jar加入你的java工程extend lib 中去。

 

然后你可以清晰的看到XXX.jar中包含的函数和类

 

  1. import com.mathworks.toolbox.javabuilder.MWException;  
  2. import com.mathworks.toolbox.javabuilder.MWNumericArray;  
  3. import XXX.XXXX;  
  4. class Test {  
  5.     public static void main(String[] args) {  
  6.         try {  
  7.             XXXX abc=new XXXX();  
  8.                           
  9.             Object[] result = null/* Stores the result */  
  10.             int a=10, b=2;  
  11.             result=abc.operation(4, a, b );  
  12.   
  13.             System.out.println(result[0].toString());  
  14.             System.out.println(result[1].toString());  
  15.             System.out.println(result[2].toString());  
  16.             System.out.println();  
  17.         } catch (MWException e1) {  
  18.             // TODO Auto-generated catch block   
  19.             e1.printStackTrace();  
  20.         } finally {  
  21.             /* Free native resources */  
  22.             System.gc();  
  23.         }  
  24.     }  
import com.mathworks.toolbox.javabuilder.MWException;
import com.mathworks.toolbox.javabuilder.MWNumericArray;
import XXX.XXXX;
class Test {
	public static void main(String[] args) {
		try {
			XXXX abc=new XXXX();
						
			Object[] result = null; /* Stores the result */
			int a=10, b=2;
			result=abc.operation(4, a, b );

			System.out.println(result[0].toString());
			System.out.println(result[1].toString());
			System.out.println(result[2].toString());
			System.out.println();
		} catch (MWException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} finally {
			/* Free native resources */
			System.gc();
		}
	}


如果result[0]返回的是一个数组,可以通过如下的方法解决

 

MWNumericArray a = new MWNumericArray(Double.valueOf(result[0].toString()),MWClassID.DOUBLE);

MWNumericArray temp = (MWNumericArray)result[0];

float [][] weights=(float[][])temp.toFloatArray();

 

 

 

五、可能碰到的问题

Exception in thread "main" java.lang.UnsatisfiedLinkError: Failed to find the library libmwmclmcrrt.so.7.13, required by MATLAB Builder JA, on java.library.path.
 This library is typically installed along with MATLAB or the MCR, its absence may indicate an issue with that installation or the current path configuration.
The MCR version that this component is trying to use is: 7.13.

 

 

Failed to find the library mclmcrrt710.dll,required by MATLAB Builder JA, on java.library.path

 

 

原因是2009a要对应安装mclmcrrt7.10。在MATLAB安装目录下查找:\toolbox\compiler\deploy\win32,找到MCRInstaller.exe 安装,重启Eclipse即可。

目录
相关文章
|
1月前
|
JavaScript 前端开发 Java
Java Script中的函数原型是什么
Java Script中的函数原型是什么
11 0
|
1月前
|
索引
matlab--------矩阵重构,重新排列的相关函数说明
matlab--------矩阵重构,重新排列的相关函数说明
38 0
matlab--------矩阵重构,重新排列的相关函数说明
|
23天前
雷达模糊函数及MATLAB仿真(三)
雷达模糊函数及MATLAB仿真
15 0
|
23天前
雷达模糊函数及MATLAB仿真(一)
雷达模糊函数及MATLAB仿真
25 0
|
1月前
|
Java 数据库连接 API
Java 学习路线:基础知识、数据类型、条件语句、函数、循环、异常处理、数据结构、面向对象编程、包、文件和 API
Java 是一种广泛使用的、面向对象的编程语言,始于1995年,以其跨平台性、安全性和可靠性著称,应用于从移动设备到数据中心的各种场景。基础概念包括变量(如局部、实例和静态变量)、数据类型(原始和非原始)、条件语句(if、else、switch等)、函数、循环、异常处理、数据结构(如数组、链表)和面向对象编程(类、接口、继承等)。深入学习还包括包、内存管理、集合框架、序列化、网络套接字、泛型、流、JVM、垃圾回收和线程。构建工具如Gradle、Maven和Ant简化了开发流程,Web框架如Spring和Spring Boot支持Web应用开发。ORM工具如JPA、Hibernate处理对象与数
92 3
|
1月前
|
算法
【数学建模竞赛】Matlab逻辑规则,结构基础及函数
【数学建模竞赛】Matlab逻辑规则,结构基础及函数
26 0
|
2月前
|
机器学习/深度学习 算法
基于自适应支持向量机的matlab建模与仿真,不使用matlab的SVM工具箱函数
基于自适应支持向量机的matlab建模与仿真,不使用matlab的SVM工具箱函数
|
3月前
|
机器学习/深度学习 存储
【Matlab智能算法】极限学习机-遗传算法(ELM-GA)函数极值寻优——非线性函数求极值
【Matlab智能算法】极限学习机-遗传算法(ELM-GA)函数极值寻优——非线性函数求极值
|
3月前
|
机器学习/深度学习 存储
【Matlab智能算法】Elman神经网络-遗传算法(Elman-GA)函数极值寻优——非线性函数求极值
【Matlab智能算法】Elman神经网络-遗传算法(Elman-GA)函数极值寻优——非线性函数求极值
|
3月前
|
机器学习/深度学习 存储
【Matlab智能算法】RBF神经网络-遗传算法(RBF-GA)函数极值寻优——非线性函数求极值
【Matlab智能算法】RBF神经网络-遗传算法(RBF-GA)函数极值寻优——非线性函数求极值

热门文章

最新文章