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

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

Можно выполнить функции 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.

Похожие темы