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

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

Можно выполнить функции MATLAB® от Java® с помощью MatlabEngine feval и fevalAsync методы. Эти методы работают как feval MATLAB функция. Используйте feval и fevalAsync когда это необходимо, возвратить результат функционального выполнения на Java или передать аргументы из Java.

Вызывать функцию MATLAB:

  • Передайте имя функции как строку.

  • Задайте входные параметры, требуемые функцией MATLAB.

  • Укажите, что количество выходных параметров ожидает от функции MATLAB (1, принят если не заданный).

  • Задайте соответствующий возвращенный тип для выходных параметров функции MATLAB.

  • Используйте средства записи, чтобы перенаправить выход от окна команды MATLAB до Java.

Можно также использовать MatlabEngine eval и 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();
    }
}

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

MatlabEngine feval и 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.

Похожие темы