exponenta event banner

Выполнение функций MATLAB из Java

Вызов функций MATLAB

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

Когда следует указать количество выходных аргументов

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.

Связанные темы