Можно выполнить MATLAB® функции из Java® использование MatlabEngine
feval
и fevalAsync
методы. Эти методы работают как MATLAB feval
функция. Используйте feval
и fevalAsync
когда это необходимо, возвратить результат функционального выполнения на Java или передать аргументы из Java.
Вызывать функцию MATLAB:
Передайте имя функции как строку.
Задайте входные параметры, требуемые функцией MATLAB.
Укажите, что количество выходных параметров ожидает от функции MATLAB (1, принят если не заданный).
Задайте соответствующий возвращенный тип для выходных параметров функции MATLAB.
Используйте средства записи, чтобы перенаправить выход от окна команды MATLAB до Java.
Можно также использовать MatlabEngine
eval
и evalAsync
методы, чтобы выполнить выражения MATLAB. Эти методы позволяют вам создать переменные в рабочем пространстве MATLAB, но сделать не возвращаемые значения.
Этот пример кода использует MATLAB sqrt
функционируйте, чтобы найти квадратный корень из элементов в массиве типа double. feval
метод возвращает двойной массив, содержащий результаты sqrt
вызов функции.
import com.mathworks.engine.*; public class javaFevalFunc{ public static void main(String[] args) throws Exception{ MatlabEngine eng = MatlabEngine.startMatlab(); double[] a = {2.0 ,4.0, 6.0}; double[] roots = eng.feval("sqrt", a); for (double e: roots) { System.out.println(e); } eng.close(); } }
Этот пример кода использует MATLAB gcd
функционируйте, чтобы найти наибольший общий делитель, и коэффициенты Bézout от этих двух целочисленных значений передали как входные параметры. feval
метод возвращает объектный массив, содержащий результаты gcd
вызов функции. Возвращенные значения являются целыми числами.
Поскольку gcd
MATLAB функция возвращает три выходных аргумента, задайте количество возвращенных значений в качестве первого аргумента к
feval
метод.
import com.mathworks.engine.*; public class javaFevalFcnMulti { public static void main(String[] args) throws Exception { MatlabEngine eng = MatlabEngine.startMatlab(); Object[] results = eng.feval(3, "gcd", 40, 60); Integer G = (Integer)results[0]; Integer U = (Integer)results[1]; Integer V = (Integer)results[2]; eng.close(); } }
MatlabEngine
feval
и fevalAsync
методы позволяют вам задать количество выходных аргументов, возвращенных функцией MATLAB. По умолчанию количество выходных аргументов от функции MATLAB принято, чтобы быть 1
.
Если вы хотите вызвать функцию MATLAB без выходных параметров или больше чем одного выхода, указать, что номер в качестве первого аргумента передал feval
или fevalAsync
.
Например, этот код вызывает MATLAB gcd
функция с тремя синтаксисами выходного аргумента:
Object[] results = eng.feval(3, "gcd", 40, 60);
Функции MATLAB могут вести себя по-другому в зависимости от количества выходных параметров, которые требуют. Некоторые функции не могут возвратить выходные параметры или конкретное количество выходных параметров. Например, MATLAB pause
функция содержит выполнение для конкретного количества секунд. Однако, если вы вызываете pause
с выходным аргументом функция сразу возвращается со значением состояния. Поэтому этот код не заставляет MATLAB делать паузу потому что feval
запросы один выходной аргумент.
eng.feval("pause", 10);
Чтобы приостановить выполнение MATLAB в течение этих 10 секунд, которые требуют, задайте количество выходных параметров как 0
.
eng.feval(0, "pause", 10);
Примечание
Чтобы гарантировать, что функция MATLAB называется без выходных параметров, задайте количество возвращенных аргументов как 0
.