执行MATLAB函数从Java
调用MATLAB功能
你可以执行MATLAB®来自Java的函数®使用MatlabEngine
函数宏指令
而且fevalAsync
方法。这些方法的工作原理类似于MATLAB函数宏指令
函数。使用函数宏指令
而且fevalAsync
当您想要将函数执行的结果返回给Java或从Java传递参数时。
调用MATLAB函数:
将函数名作为字符串传递。
定义MATLAB函数所需的输入参数。
指定期望从MATLAB函数输出的数量(如果没有指定,则假设为1)。
为MATLAB函数的输出定义适当的返回类型。
使用写入器将MATLAB命令窗口的输出重定向到Java。
你也可以使用MatlabEngine
eval
而且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
.