主要内容

执行MATLAB函数从Java

调用MATLAB功能

你可以执行MATLAB®来自Java的函数®使用MatlabEngine函数宏指令而且fevalAsync方法。这些方法的工作原理类似于MATLAB函数宏指令函数。使用函数宏指令而且fevalAsync当您想要将函数执行的结果返回给Java或从Java传递参数时。

调用MATLAB函数:

  • 将函数名作为字符串传递。

  • 定义MATLAB函数所需的输入参数。

  • 指定期望从MATLAB函数输出的数量(如果没有指定,则假设为1)。

  • 为MATLAB函数的输出定义适当的返回类型。

  • 使用写入器将MATLAB命令窗口的输出重定向到Java。

你也可以使用MatlabEngineeval而且evalAsync计算MATLAB表达式的方法。这些方法使您能够在MATLAB工作区中创建变量,但不返回值。

执行函数,只返回一个参数

本示例代码使用MATLAB√6函数在双精度数组中查找元素的平方根。的函数宏指令方法的结果返回一个双数组√6函数调用。

进口com.mathworks.engine。*;public class javaFevalFunc{public static void main(String[] args)抛出异常{MatlabEngine eng = MatlabEngine. startmatlab ();Double [] a = {2.0,4.0, 6.0};Double[]根= eng。函数宏指令“√”);for(双e:根){System.out.println(e);} eng.close ();}}

执行带有多个返回参数的函数

本示例代码使用MATLAB肾小球囊性肾病函数从作为输入参数传递的两个整数值中找出最大公约数和Bézout系数。的函数宏指令方法的结果返回对象数组肾小球囊性肾病函数调用。返回值为整数。

因为MATLAB肾小球囊性肾病函数返回三个输出参数,指定返回值的个数作为参数的第一个参数函数宏指令方法。

进口com.mathworks.engine。*;public class javaFevalFcnMulti {public static void main(String[] args)抛出异常{MatlabEngine eng = MatlabEngine. startmatlab ();Object[] results = eng。函数宏指令(3, "gcd", 40, 60); Integer G = (Integer)results[0]; Integer U = (Integer)results[1]; Integer V = (Integer)results[2]; eng.close(); } }

何时指定输出参数的数量

MatlabEngine函数宏指令而且fevalAsync方法使您能够指定MATLAB函数返回的输出参数的数量。默认情况下,假定MATLAB函数的输出参数的数量为1

如果要调用没有输出或有多个输出的MATLAB函数,请将该数字指定为传递给的第一个参数函数宏指令fevalAsync

例如,这段代码调用MATLAB肾小球囊性肾病函数的三个输出参数语法:

Object[] results = eng。函数宏指令(3, "gcd", 40, 60);

MATLAB函数可以根据所请求的输出数量表现不同。有些函数可以不返回输出,也可以返回指定数量的输出。例如,MATLAB暂停函数在指定的秒数内保持执行。然而,如果你打电话暂停使用输出参数,函数立即返回一个状态值。因此,这段代码不会导致MATLAB暂停,因为函数宏指令请求一个输出参数。

eng。函数宏指令(“暂停”,10);

若要在要求的10秒内暂停MATLAB执行,请将输出数指定为0

eng。Feval (0, "pause", 10);

请注意

要确保在没有输出的情况下调用MATLAB函数,请将返回参数的数量指定为0

相关的话题