com.mathworks.engine.MatlabEngine class

Пакет: com.mathworks.engine

Java-класс с использованием MATLAB в качестве вычислительного движка

Описание

com.mathworks.engine.MatlabEngine класс использует процесс MATLAB® в качестве вычислительного механизма для Java®. Этот класс обеспечивает интерфейс между языком Java и MATLAB, позволяя вам оценить функции MATLAB и выражения из Java.

Сводные данные конструктора

MatlabEngine класс обеспечивает статические методы запустить MATLAB и соединиться с разделяемым сеансом работы с MATLAB синхронно или асинхронно. Только эти статические методы могут инстанцировать этого класса:

  • Запустите MATLAB синхронно — startMatlab

  • Соединитесь с разделяемым сеансом работы с MATLAB синхронно — connectMatlab

  • Запустите MATLAB асинхронно — startMatlabAsync

  • Соединитесь с разделяемым сеансом работы с MATLAB асинхронно — connectMatlabAsync

Неподдерживаемые опции запуска

Механизм не поддерживает эти опции запуска MATLAB:

  • -h

  • -help

  • -?

  • -n

  • -e

  • -softwareopengl

  • -logfile

Для получения информации об опциях запуска MATLAB смотрите Обычно Используемые опции запуска.

Сводные данные метода

Статические методы

startMatlab

Запуск MATLAB синхронно.

startMatlabAsync

Запуск MATLAB асинхронно.

findMatlab

Найдите все доступные разделяемые сеансы работы с MATLAB от локальной машины синхронно.

findMATLABAsync

Найдите все доступные разделяемые сеансы работы с MATLAB от локальной машины асинхронно.

connectMATLAB

Соединитесь с разделяемым сеансом работы с MATLAB на локальной машине синхронно.

connectMatlabAsync

Соединитесь с разделяемым сеансом работы с MATLAB на локальной машине асинхронно.

Членская переменная

NULL_WRITER

Используйте средство записи, которое игнорирует содержимое из окна команды MATLAB.

Функции членства

feval

Оцените функцию MATLAB с аргументами синхронно.

fevalAsync

Оцените функцию MATLAB с аргументами асинхронно.

eval

Выполните выражение MATLAB как строку синхронно.

evalAsync

Выполните выражение MATLAB как строку асинхронно.

getVariable

Получите переменную из базового рабочего пространства MATLAB синхронно.

getVariableAsync

Получите переменную из базового рабочего пространства MATLAB асинхронно.

putVariable

Поместите переменную в базовое рабочее пространство MATLAB синхронно.

putVariableAsync

Поместите переменную в базовое рабочее пространство MATLAB асинхронно.

разъединение

Отключитесь от текущего сеанса работы с MATLAB синхронно.

disconnectAsync

Отключитесь от текущего сеанса работы с MATLAB асинхронно.

выход

Обеспечьте завершение работы текущего сеанса работы с MATLAB синхронно.

quitAsync

Обеспечьте завершение работы текущего сеанса работы с MATLAB асинхронно.

близко

Отключите или отключите текущий сеанс работы с MATLAB.

Информация о методе

startMatlab

static MatlabEngine startMatlab(String[] options)

static MatlabEngine startMatlab()

Описание

Запуск MATLAB синхронно.

Параметры

String[] options

Опции запуска раньше запускали движок MATLAB. Можно задать несколько опций запуска. Механизм поддерживает все опции запуска MATLAB, за исключением опций, перечисленных в Неподдерживаемых опциях запуска. Для списка опций смотрите специфичную для платформы команду matlab (Windows), matlab (macOS), или matlab (Linux).

Возвращается

Экземпляр MatlabEngine

Броски

com.mathworks.engine.EngineException

MATLAB не удается запуститься.

Пример

String[] options = {"-noFigureWindows", "-r", "cd H:"};
MatlabEngine eng = MatlabEngine.startMatlab(options);

startMatlabAsync

static Future<MatlabEngine> startMatlabAsync(String[] options)

static Future<MatlabEngine> startMatlabAsync()

Описание

Запуск MATLAB асинхронно. Если MATLAB запустил, затем отменяет, нет.

Параметры

String[] options

Опции запуска раньше запускали движок MATLAB. Можно задать несколько опций запуска. Механизм поддерживает все опции запуска MATLAB, за исключением опций, перечисленных в Неподдерживаемых опциях запуска. Для списка опций смотрите специфичную для платформы команду matlab (Windows), matlab (macOS), или matlab (Linux).

Возвращается

Экземпляр Future<MatlabEngine>

Пример

Future<MatlabEngine> future = MatlabEngine.startMatlabAsync();

findMatlab

static String[] findMatlab()

Описание

Найдите все разделяемые сеансы работы с MATLAB на локальной машине синхронно.

Возвращается

Массив имен всех разделяемых сеансов работы с MATLAB на локальной машине или пустой вектор, при отсутствии разделяемых сеансов работы с MATLAB, доступных на локальной машине.

Броски

com.mathworks.engine.EngineException

Если существует отказ во время поиска сеансов работы с MATLAB.

Пример

String[] engines = MatlabEngine.findMatlab();

findMatlabAsync

static Future<String[]> findMatlabAsync()

Описание

Найдите все разделяемые сеансы работы с MATLAB на локальной машине асинхронно.

Возвращается

Экземпляр Future<String[]>

Пример

Future<String[]> future = MatlabEngine.findMatlabAsync();

connectMatlab

static MatlabEngine connectMatlab(String name)

static MatlabEngine connectMatlab()

Описание

Соединитесь с разделяемым сеансом работы с MATLAB на локальной машине синхронно.

  • Если вы задаете имя разделяемого сеанса работы с MATLAB, но механизм не может найти сеанс с тем именем, механизм выдает исключение.

  • Если вы не задаете имя и нет никакого разделяемого доступного сеанса работы с MATLAB, механизм запускает новый разделяемый сеанс работы с MATLAB с опциями по умолчанию.

  • Если вы не задаете имя и существуют совместно использованные доступные сеансы работы с MATLAB, подключения механизма к первому доступному сеансу.

Параметры

String name

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

Возвращается

Экземпляр MatlabEngine

Броски

com.mathworks.engine.EngineException

MATLAB не удается запуститься или соединиться.

Пример

MatlabEngine engine = MatlabEngine.connectMatlab();

connectMatlabAsync

static Future<MatlabEngine> connectMatlabAsync(String name)

static Future<MatlabEngine> connectMatlabAsync

Описание

Соединитесь с разделяемым сеансом работы с MATLAB на локальной машине асинхронно. Поведение совпадает с поведением connectMatlab кроме механизма является асинхронным. Если связь была установлена с MATLAB, затем отменяет, нет.

Параметры

String name

Имя разделяемого сеанса работы с MATLAB.

Возвращается

Экземпляр Future<MatlabEngine>

Пример

Future<MatlabEngine> future = MatlabEngine.connectMatlabAsync();

feval

<T> T feval(int nlhs, String func, Writer output, Writer error, Object… args)

<T> T feval(int nlhs, String func, Object… args)

<T> T feval(String func, Writer output, Writer error, Object… args)

<T> T feval(String func, Object… args)

Описание

Оцените функции MATLAB с входными параметрами синхронно.

Параметры

String func

Имя функции MATLAB или скрипта, чтобы оценить.

int nlhs

Количество ожидаемых выходных параметров. Значение по умолчанию равняется 1.

Если nlhs больше 1, возвращенный тип T должен быть <Object[]>.

Если nlhs 0, возвращенный тип T должен быть <Void> или <?>.

Если nlhs 1, возвращенный тип T может быть ожидаемый тип или <Object> если тип не известен.

Writer output

Поток раньше хранил стандартный вывод от функции MATLAB. Если вы не задаете средство записи, выход записан в командное окно или терминал. Используйте NULL_WRITER проигнорировать выход из окна команды MATLAB.

Writer error

Поток раньше хранил стандартную погрешность от функции MATLAB. Если вы не задаете средство записи, выход записан в командное окно или терминал. Используйте NULL_WRITER проигнорировать сообщение об ошибке из окна команды MATLAB.

Object... args

Аргументы, чтобы передать функции MATLAB.

Возвращается

Результат выполнения функции MATLAB

Броски

java.util.concurrent.CancellationException

Оценка функции MATLAB была отменена.

java.lang.InterruptedException

Оценка функции MATLAB была прервана.

java.lang.IllegalStateException

Сеанс работы с MATLAB не доступен.

com.mathworks.engine.MatlabExcecutionException

В функции существует ошибка периода выполнения MATLAB.

com.mathworks.engine.UnsupportedTypeExeption

Существует неподдерживаемый тип данных.

com.mathworks.engine.MatlabSyntaxException

В функции MATLAB существует синтаксическая ошибка.

Пример

double result = engine.feval("sqrt", 4);

fevalAsync

<T> Future<T> fevalAsync(int nlhs, String func, Writer output, Writer error, Object… args)

<T> Future<T> fevalAsync(int nlhs, String func, Object… args)

<T> Future<T> fevalAsync(String func, Writer output, Writer error, Object… args)

<T> Future<T> fevalAsync(String func, Object… args)

Описание

Оцените функции MATLAB с входными параметрами асинхронно.

Параметры

String func

Имя функции MATLAB или скрипта, чтобы оценить.

int nlhs

Количество ожидаемых выходных параметров. Значением по умолчанию является 1.

Если nlhs больше 1, возвращенный тип T должен быть <Object[]>.

Если nlhs 0, возвращенный тип T должен быть <Void> или <?>.

Если nlhs 1, возвращенный тип T может быть ожидаемый тип или <Object> если тип не известен.

Writer output

Поток раньше хранил стандартный вывод от функции MATLAB. Если вы не задаете средство записи, выход записан в командное окно или терминал. Используйте NULL_WRITER проигнорировать выход из окна команды MATLAB.

Writer error

Поток раньше хранил стандартную погрешность от функции MATLAB. Если вы не задаете средство записи, выход записан в командное окно или терминал. Используйте NULL_WRITER проигнорировать сообщение об ошибке из окна команды MATLAB.

Object... args

Аргументы, чтобы передать функции MATLAB.

Возвращается

Экземпляр Future<T>

Броски

java.lang.IllegalStateException

Сеанс работы с MATLAB не доступен.

Пример

Future<Double> future = engine.fevalAsync("sqrt", 4);

eval

void eval(String command, Writer output, Writer error)

void eval(String command)

Описание

Оцените выражение MATLAB как строку синхронно.

Параметры

String command

Выражение MATLAB, чтобы оценить.

Writer output

Поток раньше хранил стандартный вывод от выражения MATLAB. Если вы не задаете средство записи, выход записан в командное окно или терминал. Используйте NULL_WRITER проигнорировать выход из окна команды MATLAB.

Writer error

Поток раньше хранил стандартную погрешность от выражения MATLAB. Если вы не задаете средство записи, выход записан в командное окно или терминал. Используйте NULL_WRITER проигнорировать сообщение об ошибке из окна команды MATLAB.

Броски

java.util.concurrent.CancellationException

Оценка функции MATLAB была отменена.

java.lang.InterruptedException

Оценка функции MATLAB была прервана.

java.lang.IllegalStateException

Сеанс работы с MATLAB не доступен.

com.mathworks.engine.MatlabExcecutionException

Существует ошибка в выражении MATLAB во время времени выполнения.

com.mathworks.engine.MatlabSyntaxException

В выражении MATLAB существует синтаксическая ошибка.

Пример

engine.eval("result = sqrt(4)");

evalAsync

Future<Void> evalAsync(String command, Writer output, Writer error)

Future<Void> evalAsync(String command)

Описание

Оцените выражение MATLAB как строку асинхронно.

Параметры

String command

Выражение MATLAB, чтобы оценить.

Writer output

Поток раньше хранил стандартный вывод от выражения MATLAB. Если вы не задаете средство записи, выход записан в командное окно или терминал. Используйте NULL_WRITER проигнорировать выход из окна команды MATLAB.

Writer error

Поток раньше хранил стандартную погрешность от выражения MATLAB. Если вы не задаете средство записи, выход записан в командное окно или терминал. Используйте NULL_WRITER проигнорировать сообщение об ошибке из окна команды MATLAB.

Возвращается

Экземпляр Future<Void>

Броски

java.lang.IllegalStateException

Сеанс работы с MATLAB не доступен.

Пример

Future<Void> future = engine.evalAsync("sqrt(4)");

getVariable

<T> T getVariable(String varName)

Описание

Получите переменную из базового рабочего пространства MATLAB.

Параметры

String varName

Имя переменной в базовом рабочем пространстве MATLAB.

Возвращается

Переменная передается от базового рабочего пространства MATLAB

Броски

java.util.concurrent.CancellationException

Оценка этой функции отменяется.

java.lang.InterruptedException

Оценка этой функции прервана.

java.lang.IllegalStateException

Сеанс работы с MATLAB не доступен.

Пример

double myVar = engine.getVariable("myVar");

getVariableAsync

<T> Future<T> getVariableAsync(String varName)

Описание

Получите переменную из базового рабочего пространства MATLAB асинхронно.

Параметры

String varName

Имя переменной в базовом рабочем пространстве MATLAB.

Возвращается

Экземпляр Future<T>

Броски

java.lang.IllegalStateException

Сеанс работы с MATLAB не доступен.

Пример

Future<Double> future = engine.getVariableAsync("myVar");

putVariable

void putVariable(String varName, T varData)

Описание

Поместите переменную в базовое рабочее пространство MATLAB.

Параметры

String varName

Имя переменной, чтобы создать в базовом рабочем пространстве MATLAB.

T varData

Значение переменной, чтобы создать в базовом рабочем пространстве MATLAB.

Броски

java.util.concurrent.CancellationException

Оценка этой функции отменяется.

java.lang.InterruptedException

Оценка этой функции прервана.

java.lang.IllegalStateException

Сеанс работы с MATLAB не доступен.

Пример

engine.putVariable("myVar", 100);

putVariableAsync

Future<Void> putVariableAsync(String varName, T varData)

Описание

Поместите переменную в базовое рабочее пространство MATLAB асинхронно.

Параметры

String varName

Имя переменной, чтобы создать в базовом рабочем пространстве MATLAB.

T varData

Значение переменной, чтобы создать в базовом рабочем пространстве MATLAB.

Возвращается

Экземпляр Future<Void>

Броски

java.lang.IllegalStateException

Сеанс работы с MATLAB не доступен.

Пример

Future<Void> future = engine.putVariableAsync("myVar", 100);

disconnect

void disconnect()

Описание

Отключитесь от текущего сеанса работы с MATLAB.

Броски

com.mathworks.engine.EngineException

Текущий сеанс работы с MATLAB не может быть отключен.

Пример

engine.disconnect();

disconnectAsync

Future<Void> disconnectAsync()

Описание

Отключитесь от текущего сеанса работы с MATLAB.

Пример

Future<Void> future = engine.disconnectAsync();

quit

void quit()

Описание

Обеспечьте завершение работы текущего сеанса работы с MATLAB.

Броски

com.mathworks.engine.EngineException

Текущий сеанс работы с MATLAB не может быть закрыт.

Пример

engine.quit();

quitAsync

Future<Void> quitAsync()

Описание

Обеспечьте завершение работы текущего сеанса работы с MATLAB асинхронно, не ожидая завершения.

Возвращается

Экземпляр Future<Void>

Пример

Future<Void> future = engine.quitAsync();

close

void close()

Описание

MatlabEngine обеспечивает close() метод, чтобы реализовать java.lang.AutoCloseable интерфейс для MatlabEngine объекты. Этот close() метод позволяет вам использовать try- оператор с ресурсами, чтобы автоматически разъединиться или отключить сеанс работы с MATLAB в конце оператора.

MatlabEngine close() метод отключает или отключает текущий сеанс работы с MATLAB, в зависимости от контекста.

  • Если процесс Java запускает сеанс работы с MATLAB как неразделяемый сеанс по умолчанию, close() отключает MATLAB.

  • Если сеанс работы с MATLAB является сеансом совместной работы, close() разъединения MATLAB от этого процесса Java. MATLAB завершает работу, когда нет никаких других связей.

Чтобы обеспечить завершение работы или разъединение текущего сеанса работы с MATLAB, явным образом вызовите MatlabEngine.quit(), MatlabEngine.disconnect(), или их асинхронные дубликаты.

Пример

engine.close();

Примеры

Запустите двигатель с рабочим столом MATLAB

import  com.mathworks.engine.*;

public class StartMatlab {
    public static void main(String[] args) throws Exception {
        MatlabEngine eng = MatlabEngine.startMatlab("-desktop");
        ...
        eng.close();
    }
}

Выполнение функции асинхронно

В этом примере показано, как оценить функцию MATLAB асинхронно. Рабочий процесс:

  • Откройте сеанс работы с MATLAB.

  • Вызовите MATLAB sqrt функция с аргументами асинхронно.

  • Получите результат функции MATLAB.

  • Закройте движок MATLAB.

import com.mathworks.engine.MatlabEngine

Future<MatlabEngine> engFuture = MatlabEngine.startMatlabAsync();
MatlabEngine engine = engFuture.get();
double myVar = 4;
Future<Double> future = engine.fevalAsync("sqrt", myVar);
double result = future.get();
System.out.println(result);

Введенный в R2017b