Оцените функции MATLAB из программы C++
Класс matlab::engine::MATLABEngine
использует процесс MATLAB® в качестве вычислительного механизма для C++. Этот класс обеспечивает интерфейс между языком C++ и MATLAB, позволяя вам оценить функции MATLAB и выражения из программ C++.
Пространство имен: | matlab::engine |
Включение: | MatlabEngine.hpp |
Класс matlab::engine::MATLABEngine
предоставляет методы, чтобы запустить MATLAB и соединиться с разделяемым сеансом работы с MATLAB синхронно или асинхронно.
mATLAB engine.start_matlab
Запуск MATLAB синхронно
matlab::engine::startMATLABAsync
— Запуск MATLAB асинхронно
mATLAB engine.connect_matlab
Соединитесь с разделяемым сеансом работы с MATLAB синхронно
matlab::engine::connectMATLABAsync
— Соединение с разделяемым сеансом работы с MATLAB асинхронно
Механизм не поддерживает эти опции запуска MATLAB:
-h
-help
-?
-n
-e
-softwareopengl
-logfile
Для получения информации об опциях запуска MATLAB смотрите Обычно Используемые опции запуска. Для примера того, как использовать опции запуска MATLAB при запущении приложений механизма, смотрите, Запускают MATLAB с опций запуска.
Оцените функцию MATLAB с аргументами синхронно | |
Оцените функцию MATLAB с аргументами асинхронно | |
Оцените выражение MATLAB как строку синхронно | |
Оцените выражение MATLAB как строку асинхронно | |
Станьте переменными от базового рабочего пространства MATLAB синхронно | |
Станьте переменными от базового рабочего пространства MATLAB асинхронно | |
Поместите переменную в базовое рабочее пространство MATLAB синхронно | |
Поместите переменную в базовое рабочее пространство MATLAB асинхронно | |
Получите значение свойства объекта | |
Получите значение свойства объекта асинхронно | |
Установите значение свойства объекта | |
Установите значение свойства объекта асинхронно |
feval
std::vector<matlab::data::Array> feval(const matlab::engine::String &function, const size_t numReturned, const std::vector<matlab::data::Array> &args, const std::shared_ptr<matlab::engine::StreamBuffer> &output = std::shared_ptr<matlab::engine::StreamBuffer>(), const std::shared_ptr<matlab::engine::StreamBuffer> &error = std::shared_ptr<matlab::engine::StreamBuffer>())
matlab::data::Array feval(const matlab::engine::String &function, const std::vector<matlab::data::Array> &args, const std::shared_ptr<matlab::engine::StreamBuffer> &output = std::shared_ptr<matlab::engine::StreamBuffer>(), const std::shared_ptr<matlab::engine::StreamBuffer> &error = std::shared_ptr<matlab::engine::StreamBuffer>())
matlab::data::Array feval(const matlab::engine::String &function, const matlab::data::Array &arg, const std::shared_ptr<matlab::engine::StreamBuffer> &output = std::shared_ptr<matlab::engine::StreamBuffer>(), const std::shared_ptr<matlab::engine::StreamBuffer> &error = std::shared_ptr<matlab::engine::StreamBuffer>())
ResultType feval(const matlab::engine::String &function, const std::shared_ptr<matlab::engine::StreamBuffer> &output, const std::shared_ptr<matlab::engine::StreamBuffer> &error, RhsArgs&&... rhsArgs )
ResultType feval(const matlab::engine::String &function, RhsArgs&&... rhsArgs)
Оцените функции MATLAB с входными параметрами синхронно. Используйте feval когда это необходимо, чтобы передать аргументы от C++ до MATLAB и когда это необходимо возвратить результат MATLAB в C++.
Вводы и выводы могут быть типами, заданными API Массива данных MATLAB, или могут быть нативными типами C++.
| Имя функции MATLAB или скрипта, чтобы оценить. Задайте имя как |
|
Количество возвращенных значений |
| Несколько входных параметров, чтобы передать функции MATLAB в |
|
Один входной параметр, чтобы передать функции MATLAB. |
|
Потоковый буфер раньше хранил стандартный вывод от функции MATLAB. |
|
Потоковый буфер раньше хранил сообщение об ошибке от функции MATLAB. |
|
Нативные типы данных C++ используются для входных параметров функции. |
|
Выходные параметры возвращены функции MATLAB. |
|
Один выходной параметр возвращен функции MATLAB. |
| Выведите возвратился из функции MATLAB как заданный пользователями тип. Может быть |
|
Сеанс работы с MATLAB не доступен. |
|
В функции существует ошибка периода выполнения MATLAB. |
|
Результат функции MATLAB не может быть преобразован в заданный тип. |
|
В функции MATLAB существует синтаксическая ошибка. |
Этот пример передает массив числовых значений к функции MATLAB. Код выполняет эти шаги:
Создает matlab::data::Array
с размерностями 2 3 от вектора числовых значений, типа double.
Запускает разделяемый сеанс работы с MATLAB.
Передает массив данных функции sqrt
MATLAB и возвращает результат в C++.
#include "MatlabDataArray.hpp" #include "MatlabEngine.hpp" using namespace matlab::engine;
std::vector<double> cppData{ 4, 8, 12, 16, 20, 24 }; // Create a 2-by-3 matlab data array matlab::data::ArrayFactory factory; auto inputArray = factory.createArray({ 2, 3 }, cppData.cbegin(), cppData.cend()); // Start MATLAB engine std::unique_ptr<MATLABEngine> matlabPtr = startMATLAB(); // Pass data array to MATLAB sqrt function // And return results. auto result = matlabPtr->feval(u"sqrt", inputArray);
При вызове feval
с помощью нативных типов C++ входные параметры ограничиваются скалярными значениями. Например, этот код возвращает квадратный корень из скалярного значения.
#include "MatlabEngine.hpp" using namespace matlab::engine;
// Start MATLAB engine synchronously std::unique_ptr<MATLABEngine> matlabPtr = startMATLAB(); // Call sqrt function double result = matlabPtr->feval<double>(u"sqrt", double(27));
Для функций, которые возвращают несколько выходных аргументов, можно использовать API данных MATLAB или, при использовании типов C++, std::tuple
. Для примера смотрите, Вызывают Функцию с Собственным компонентом Типы C++.
fevalAsync
FutureResult<std::vector<matlab::data::Array>> fevalAsync(const matlab::engine::String &function, const size_t numReturned, const std::vector<matlab::data::Array> &args, const std::shared_ptr<matlab::engine::StreamBuffer> &output = std::shared_ptr<matlab::engine::StreamBuffer>(), const std::shared_ptr<matlab::engine::StreamBuffer> &error = std::shared_ptr<matlab::engine::StreamBuffer>())
FutureResult<matlab::data::Array> fevalAsync(const matlab::engine::String &function, const std::vector<matlab::data::Array> &args, const std::shared_ptr<matlab::engine::StreamBuffer> &output = std::shared_ptr<matlab::engine::StreamBuffer>(), const std::shared_ptr<matlab::engine::StreamBuffer> &error = std::shared_ptr<matlab::engine::StreamBuffer>())
FutureResult<matlab::data::Array> fevalAsync(const matlab::engine::String &function, const matlab::data::Array &arg, const std::shared_ptr<matlab::engine::StreamBuffer> & output = std::shared_ptr<matlab::engine::StreamBuffer>(), const std::shared_ptr<matlab::engine::StreamBuffer> & error = std::shared_ptr<matlab::engine::StreamBuffer>())
FutureResult<ResultType> fevalAsync(const matlab::engine::String &function, const std::shared_ptr<matlab::engine::StreamBuffer> &output, const std::shared_ptr<matlab::engine::StreamBuffer> &error, RhsArgs&&... rhsArgs)
FutureResult<ResultType> fevalAsync(const matlab::engine::String &function, RhsArgs&&... rhsArgs)
Оцените функцию MATLAB с входными параметрами и возвращенными значениями асинхронно.
| Имя функции MATLAB или скрипта, чтобы оценить. Задайте имя как |
|
Количество возвращенных значений |
| Несколько входных параметров, чтобы передать функции MATLAB в |
|
Один входной параметр, чтобы передать функции MATLAB. |
|
Потоковый буфер раньше хранил стандартный вывод от функции MATLAB. |
|
Потоковый буфер раньше хранил сообщение об ошибке от функции MATLAB. |
|
Нативные типы данных C++ используются для входных параметров функции. |
|
Объект |
'none'
Этот пример передает скаляр дважды 12.7 к функции sqrt
MATLAB асинхронно. FutureResult
затем используется, чтобы получить результат.
#include "MatlabDataArray.hpp" #include "MatlabEngine.hpp" using namespace matlab::engine;
std::unique_ptr<MATLABEngine> matlabPtr = startMATLAB(); matlab::data::ArrayFactory factory; matlab::data::Array argument = factory.createScalar<double>(12.7); FutureResult<matlab::data::Array> future = matlabPtr->fevalAsync(u"sqrt", std::move(argument)); ... matlab::data::TypedArray<double> result = future.get();
eval
void eval(const matlab::engine::String &statement, const std::shared_ptr<matlab::engine::StreamBuffer> &output = std::shared_ptr<matlab::engine::StreamBuffer> (), const std::shared_ptr<matlab::engine::StreamBuffer> &error = std::shared_ptr<matlab::engine::StreamBuffer> ())
Оцените выражение MATLAB как строку синхронно.
|
Выражение MATLAB, чтобы оценить |
|
Потоковый буфер раньше хранил стандартный вывод от выражения MATLAB. |
|
Потоковый буфер раньше хранил сообщение об ошибке от команды MATLAB. |
|
Сеанс работы с MATLAB не доступен. |
|
В выражении MATLAB существует ошибка периода выполнения. |
|
В выражении MATLAB существует синтаксическая ошибка. |
Этот пример оценивает следующее выражение MATLAB.
a = sqrt(12.7);
Оператор создает переменную a
в базовом рабочем пространстве MATLAB.
#include "MatlabEngine.hpp" using namespace matlab::engine;
std::unique_ptr<MATLABEngine> matlabPtr = startMATLAB(); matlabPtr->eval(u"a = sqrt(12.7);");
evalAsync
FutureResult<void> evalAsync(const matlab::engine::String &str, const std::shared_ptr<matlab::engine::StreamBuffer> &output = std::shared_ptr<matlab::engine::StreamBuffer> (), const std::shared_ptr<matlab::engine::StreamBuffer> &error = std::shared_ptr<matlab::engine::StreamBuffer> ())
Оцените выражение MATLAB как строку асинхронно.
|
Выражение MATLAB, чтобы оценить |
|
Потоковый буфер раньше хранил стандартный вывод от выражения MATLAB. |
|
Потоковый буфер раньше хранил сообщение об ошибке от команды MATLAB. |
|
Объект |
'none'
Этот пример оценивает следующее выражение MATLAB асинхронно.
a = sqrt(12.7);
Оператор создает переменную a
в базовом рабочем пространстве MATLAB.
#include "MatlabEngine.hpp" using namespace matlab::engine;
std::unique_ptr<MATLABEngine> matlabPtr = startMATLAB(); FutureResult<void> future = matlabPtr->evalAsync(u"a = sqrt(12.7);");
getVariable
matlab::data::Array getVariable(const matlab::engine::String &varName, matlab::engine::WorkspaceType workspaceType = matlab::engine::WorkspaceType::BASE)
Получите переменную из основы MATLAB или глобальной рабочей области.
| Имя переменной в рабочем пространстве MATLAB. Задайте имя как |
|
Рабочее пространство MATLAB (ОСНОВА или ГЛОБАЛЬНАЯ ПЕРЕМЕННАЯ), чтобы получить переменную из. Для получения дополнительной информации смотрите |
|
Переменная, полученная из MATLAB, базируется или глобальная рабочая область |
|
Сеанс работы с MATLAB не доступен. |
|
Требуемая переменная не существует в заданной основе MATLAB или глобальной рабочей области. |
Этот пример получает переменную под названием varName
от базового рабочего пространства MATLAB.
#include "MatlabEngine.hpp" using namespace matlab::engine;
std::unique_ptr<MATLABEngine> matlabPtr = startMATLAB(); matlab::data::Array varName = matlabPtr->getVariable(u"varName");
getVariableAsync
FutureResult<matlab::data::Array> getVariableAsync(const matlab::engine::String &varName, matlab::engine::WorkspaceType workspaceType = matlab::engine::WorkspaceType::BASE)
Получите переменную из основы MATLAB или глобальной рабочей области асинхронно.
| Имя переменной в рабочем пространстве MATLAB. Задайте имя как |
|
Рабочее пространство MATLAB (ОСНОВА или ГЛОБАЛЬНАЯ ПЕРЕМЕННАЯ), чтобы получить переменную из. Для получения дополнительной информации смотрите |
|
Объект |
'none'
Этот пример получает переменную под названием varName
от базового рабочего пространства MATLAB асинхронно.
#include "MatlabEngine.hpp" using namespace matlab::engine;
std::unique_ptr<MATLABEngine> matlabPtr = startMATLAB(); FutureResult<matlab::data::Array> future = matlabPtr->getVariableAsync(u"varName"); ... matlab::data::Array varName = future.get();
setVariable
void setVariable(const matlab::engine::String &varName, const matlab::data::Array &var, matlab::engine::WorkspaceType workspaceType = matlab::engine::WorkspaceType::BASE)
Поместите переменную в основу MATLAB или глобальную рабочую область. Если переменная с тем же именем существует в рабочем пространстве MATLAB, setVariable
перезаписывает его.
| Имя переменной, чтобы создать в рабочем пространстве MATLAB. Задайте имя как |
|
Значение переменной, чтобы создать в рабочем пространстве MATLAB |
|
Поместите переменную в ОСНОВУ MATLAB или ГЛОБАЛЬНУЮ рабочую область. Для получения дополнительной информации смотрите |
|
Сеанс работы с MATLAB не доступен. |
Этот пример помещает переменную под названием data
в базовом рабочем пространстве MATLAB.
#include "MatlabEngine.hpp" using namespace matlab::engine;
std::unique_ptr<MATLABEngine> matlabPtr = startMATLAB(); matlab::data::Array data = factory.createArray<double>({ 1, 3 }, { 4, 8, 6 }); matlabPtr->setVariable(u"data", data);
setVariableAsync
FutureResult<void> setVariableAsync(const matlab::engine::String &varName, const matlab::data::Array var, matlab::engine::WorkspaceType workspaceType = matlab::engine::WorkspaceType::BASE)
Поместите переменную в основу MATLAB или глобальную рабочую область асинхронно. Если переменная с тем же именем существует в базовом рабочем пространстве MATLAB, setVariableAsync
перезаписывает его.
| Имя переменной, чтобы создать в рабочем пространстве MATLAB. Задайте имя как |
|
Значение переменной, чтобы создать в рабочем пространстве MATLAB |
|
Поместите переменную в ОСНОВУ MATLAB или ГЛОБАЛЬНУЮ рабочую область. Для получения дополнительной информации смотрите |
'none'
Этот пример помещает переменную под названием data
в базовом рабочем пространстве MATLAB.
#include "MatlabEngine.hpp" using namespace matlab::engine;
std::unique_ptr<MATLABEngine> matlabPtr = startMATLAB(); matlab::data::Array data = factory.createArray<double>({ 1, 3 }, { 4., 8., 6. }); FutureResult<void> future = matlabPtr->setVariableAsync(u"data", data);
getProperty
matlab::data::Array getProperty(const matlab::data::Array &objectArray, size_t index, const matlab::engine::String &propertyName)
matlab::data::Array getProperty(const matlab::data::Array &object, const matlab::engine::String &propertyName)
Получите значение свойства объекта. Если объектный входной параметр является массивом объектов, задайте индекс элемента массива, который соответствует объекту, значение свойства которого вы хотите получить.
| Массив объектов MATLAB |
| Скалярный объект MATLAB |
| Основанный на нуле индекс в объектный массив, задавая объект в том массиве, значение свойства которого возвращено |
| Имя свойства. Задайте имя как |
|
Значение именованного свойства |
|
Сеанс работы с MATLAB не доступен. |
|
Свойство не существует. |
Этот пример оценивает выражение MATLAB в блоке попытки/выгоды с помощью MATLABEngine::eval
. Функция членства MATLABEngine::getVariable
возвращает объект исключения. MATLABEngine::getProperty
возвращает исключение значение свойства message
как matlab::data::CharArray
.
#include "MatlabEngine.hpp" using namespace matlab::engine;
std::unique_ptr<MATLABEngine> matlabPtr = startMATLAB(); matlabPtr->eval(u"try; surf(4); catch me; end"); matlab::data::Array mException = matlabPtr->getVariable(u"me"); matlab::data::CharArray message = matlabPtr->getProperty(mException, u"message"); std::cout << "messages is: " << message.toAscii() << std::endl;
getPropertyAsync
FutureResult<matlab::data::Array> getPropertyAsync(const matlab::data::Array &objectArray, size_t index, const matlab::engine::String &propertyName)
FutureResult<matlab::data::Array> getPropertyAsync(const matlab::data::Array &object, const matlab::engine::String &propertyName)
Получите значение свойства объекта асинхронно. Если объектный входной параметр является массивом объектов, задайте индекс элемента массива, который соответствует объекту, значение свойства которого вы хотите получить.
| Массив объектов MATLAB |
| Скалярный объект MATLAB |
| Основанный на нуле индекс в объектный массив, задавая объект в том массиве, значение свойства которого возвращено |
| Имя свойства. Задайте имя как |
|
Объект |
'none'
Этот пример оценивает выражение MATLAB в блоке попытки/выгоды с помощью MATLABEngine::eval
. Функция членства MATLABEngine::getVariable
возвращает объект исключения. MATLABEngine::getPropertyAsync
возвращает FutureResult
, который вы используете, чтобы получить исключение значение свойства message
как matlab::data::CharArray
.
#include "MatlabEngine.hpp" using namespace matlab::engine;
std::unique_ptr<MATLABEngine> matlabPtr = startMATLAB(); matlabPtr->eval(u"try;surf(4);catch me;end"); matlab::data::Array mException = matlabPtr->getVariable(u"me"); FutureResult<matlab::data::Array> future = matlabPtr->getPropertyAsync(mException, u"message"); matlab::data::CharArray message = future.get(); std::cout << "messages is: " << message.toAscii() << std::endl;
setProperty
void setProperty(matlab::data::Array &objectArray, size_t index, const matlab::engine::String &propertyName, const matlab::data::Array &propertyValue)
void setProperty(matlab::data::Array &object, const matlab::engine::String &propertyName, const matlab::data::Array &propertyValue)
Установите значение свойства объекта. Если объектный входной параметр является массивом объектов, задайте индекс элемента массива, который соответствует объекту, значение свойства которого вы хотите установить.
| Массив объектов MATLAB |
| Скалярный объект MATLAB |
| Основанный на нуле индекс в объектный массив, задавая объект в том массиве, значение свойства которого установлено |
| Имя свойства установить. Задайте имя как |
const matlab::data::Array &propertyValue |
Значение присвоено свойству |
|
Сеанс работы с MATLAB не доступен. |
|
Свойство не существует. |
Этот пример показывает, как установить свойство объекта MATLAB. Это создает график MATLAB и возвращает объект указателя строки. Устанавливание значения свойства LineStyle
строки к символьному :
изменяет значение свойства объекта линии в MATLAB и обновляет стиль линии графика.
#include "MatlabEngine.hpp" using namespace matlab::engine;
std::unique_ptr<MATLABEngine> matlabPtr = startMATLAB(); matlab::data::ArrayFactory factory; matlab::data::Array yData = factory.createArray<double>({ 1, 5 }, { 4.0, 11.0, 4.7, 36.2, 72.3 }); matlab::data::Array lineHandle = matlabPtr->feval(u"plot", yData); matlab::data::CharArray lineStyle = factory.createCharArray(":"); matlabPtr->setProperty(lineHandle, u"LineStyle", lineStyle);
setPropertyAsync
FutureResult<void> setPropertyAsync(matlab::data::Array &objectArray, size_t index, const matlab::engine::String &propertyName, const matlab::data::Array &propertyValue)
FutureResult<void> setPropertyAsync(matlab::data::Array &object, const matlab::engine::String &propertyName, const matlab::data::Array &propertyValue)
Установите значение свойства объекта асинхронно. Если объектный входной параметр является массивом объектов, задайте индекс элемента массива, который соответствует объекту, значение свойства которого вы хотите установить.
| Массив объектов MATLAB |
| Скалярный объект MATLAB |
| Основанный на нуле индекс в объектный массив, задавая объект в том массиве, значение свойства которого установлено |
| Имя свойства установить. Задайте имя как |
const matlab::data::Array &propertyValue |
Значение присвоено свойству. |
'none'
Этот пример показывает, как установить свойство объекта MATLAB асинхронно. Это создает график MATLAB и возвращает объект указателя строки. Установка свойства LineStyle
строки к символьному :
изменяет значение свойства объекта в MATLAB и обновляет стиль линии графика.
#include "MatlabEngine.hpp" using namespace matlab::engine;
std::unique_ptr<MATLABEngine> matlabPtr = startMATLAB(); matlab::data::ArrayFactory factory; matlab::data::Array yData = factory.createArray<double>({ 1, 5 }, { 4.0, 11.0, 4.7, 36.2, 72.3 }); matlab::data::Array lineHandle = matlabPtr->feval(u"plot", yData); matlab::data::CharArray lineStyle = factory.createCharArray(":"); FutureResult<void> future = matlabPtr->setPropertyAsync(lineHandle, u"LineStyle", lineStyle);