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月前
|
算法 Serverless
基于魏格纳函数和焦散线方法的自加速光束matlab模拟与仿真
本项目基于魏格纳函数和焦散线方法,使用MATLAB 2022A模拟自加速光束。通过魏格纳函数法生成多种自加速光束,并设计相应方法,展示仿真结果。核心程序包括相位和幅度的计算、光场分布及拟合分析,实现对光束传播特性的精确控制。应用领域涵盖光学成像、光操控和光束聚焦等。 关键步骤: 1. 利用魏格纳函数计算光场分布。 2. 模拟并展示自加速光束的相位和幅度图像。 3. 通过拟合分析,验证光束加速特性。 该算法原理基于魏格纳函数描述光场分布,结合数值模拟技术,实现对光束形状和传播特性的精确控制。通过调整光束相位分布,可改变其传播特性,如聚焦或加速。
|
4月前
|
算法 数据可视化 数据处理
MATLAB内置函数
【10月更文挑战第6天】本文详细介绍了MATLAB的内置函数和自定义函数,涵盖数学计算、矩阵操作、图形绘制等方面。通过具体代码示例,展示了如何使用内置函数和创建自定义函数,以及它们在性能、灵活性和可读性上的优劣。同时,文章还讨论了函数文件与脚本文件的区别,匿名函数和函数句柄的高级应用,帮助读者更好地利用MATLAB解决复杂问题。
109 1
|
4月前
|
Java
让星星⭐月亮告诉你,jdk1.8 Java函数式编程示例:Lambda函数/方法引用/4种内建函数式接口(功能性-/消费型/供给型/断言型)
本示例展示了Java中函数式接口的使用,包括自定义和内置的函数式接口。通过方法引用,实现对字符串操作如转换大写、数值转换等,并演示了Function、Consumer、Supplier及Predicate四种主要内置函数式接口的应用。
40 1
|
4月前
|
存储 机器学习/深度学习 数据可视化
MATLAB脚本与函数
【10月更文挑战第4天】本文介绍了MATLAB脚本与函数的基本概念及编写方法,涵盖脚本和函数的创建、运行及优缺点,通过示例帮助初学者快速上手。同时,文章还涉及数据类型、控制结构、数据可视化、文件操作、错误处理等内容,提供了丰富的示例和学习资源,助力初学者逐步掌握MATLAB编程。
169 3
|
4月前
|
Java 编译器 C语言
【一步一步了解Java系列】:Java中的方法对标C语言中的函数
【一步一步了解Java系列】:Java中的方法对标C语言中的函数
43 3
|
5月前
|
Java
java基础(11)函数重载以及函数递归求和
Java支持函数重载,即在同一个类中可以声明多个同名方法,只要它们的参数类型和个数不同。函数重载与修饰符、返回值无关,但与参数的类型、个数、顺序有关。此外,文中还展示了如何使用递归方法`sum`来计算两个数之间的和,递归的终止条件是当第一个参数大于第二个参数时。
44 1
java基础(11)函数重载以及函数递归求和
|
6月前
|
存储 运维 Java
函数计算产品使用问题之怎么配置定时触发器来调用Java函数
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
6月前
|
Java 调度 Android开发
Android经典实战之Kotlin的delay函数和Java中的Thread.sleep有什么不同?
本文介绍了 Kotlin 中的 `delay` 函数与 Java 中 `Thread.sleep` 方法的区别。两者均可暂停代码执行,但 `delay` 适用于协程,非阻塞且高效;`Thread.sleep` 则阻塞当前线程。理解这些差异有助于提高程序效率与可读性。
104 1
|
6月前
|
开发框架 Java Android开发
JNI中调用Java函数
JNI中调用Java函数
46 0
|
6月前
|
开发框架 Java Android开发
JNI中调用Java函数
JNI中调用Java函数
50 0

热门文章

最新文章