Можно выполнить 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. The 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
функция для нахождения наибольших коэффициентов общего делителя и Безу из двух целочисленных значений, переданных в качестве входных параметров. The feval
метод возвращает объектный массив, содержащий результаты gcd
вызов функции. Возвращенные значения являются целыми числами.
Потому что MATLAB gcd
функция возвращает три выходных аргументов, задает количество возвращаемых значений в качестве первого аргумента в 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(); } }
The 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
.