Можно выполнить функции MATLAB® от Java® с помощью feval
MatlabEngine
и методов fevalAsync
. Эти методы работают как функция feval
MATLAB. Используйте feval
и fevalAsync
когда это необходимо, чтобы возвратить результат функционального выполнения на Java или передать аргументы из Java.
Вызывать функцию MATLAB:
Передайте имя функции как строку.
Задайте входные параметры, требуемые функцией MATLAB.
Укажите, что количество выходных параметров ожидает от функции MATLAB (1, принят если не заданный).
Задайте соответствующий возвращенный тип для выходных параметров функции MATLAB.
Используйте средства записи, чтобы перенаправить вывод от окна команды MATLAB до Java.
Можно также использовать eval
MatlabEngine
и методы evalAsync
, чтобы выполнить выражения MATLAB. Эти методы позволяют вам создать переменные в рабочем пространстве MATLAB, но сделать не возвращаемые значения.
Этот пример кода использует функцию sqrt
MATLAB, чтобы найти, что квадратный корень из элементов в массиве удваивается. Метод 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(); } }
Этот пример кода использует функцию gcd
MATLAB, чтобы найти наибольший общий делитель, и коэффициенты 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(); } }
feval
MatlabEngine
и методы fevalAsync
позволяют вам задать количество выходных аргументов, возвращенных функцией MATLAB. По умолчанию количество выходных аргументов от функции MATLAB принято, чтобы быть 1
.
Если вы хотите вызвать функцию MATLAB без выходных параметров или больше чем одного вывода, указать, что номер в качестве первого аргумента передал feval
или fevalAsync
.
Например, этот код вызывает функцию gcd
MATLAB с тремя синтаксисами выходного аргумента:
Object[] results = eng.feval(3, "gcd", 40, 60);
Функции MATLAB могут вести себя по-другому в зависимости от количества выходных параметров, которые требуют. Некоторые функции не могут возвратить выходные параметры или конкретное количество выходных параметров. Например, функция pause
MATLAB содержит выполнение для конкретного количества секунд. Однако, если вы вызываете pause
с выходным аргументом, функция сразу возвращается со значением состояния. Поэтому этот код не заставляет MATLAB делать паузу, потому что feval
запрашивает один выходной аргумент.
eng.feval("pause", 10);
Чтобы приостановить выполнение MATLAB в течение этих 10 секунд, которые требуют, задайте количество выходных параметров как 0
.
eng.feval(0, "pause", 10);
Чтобы гарантировать, что функция MATLAB называется без выходных параметров, задайте количество возвращенных аргументов как 0
.