Выполнение функций 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 функция для поиска квадратного корня из элементов в массиве типа 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.

Похожие темы