Оценка MATLAB® операторы от C++, использующие MATLABEngine::eval и MATLABEngine::evalAsync представители. Эти функции представителей аналогичны MATLAB eval функция. The MATLABEngine::eval и MATLABEngine::evalAsync функции не возвращают результаты оценки выражения MATLAB.
Использование MATLABEngine::eval и MATLABEngine::evalAsync если вам не нужно передавать аргументы от C++ или возвращать значения к C++. Операторы, которые вы выполняете с этими функциями, могут получить доступ к переменным в рабочем пространстве MATLAB.
Вот некоторые вещи, которые нужно знать об оценке операторов в MATLAB.
Эти функции передают операторы в MATLAB как matlab::engine::String.
Преобразуйте std::string в matlab::engine::String использование u"…" литерал или служебная функция matlab::engine::convertUTF8StringToUTF16String.
Входные параметры, названные в строке, должны существовать в рабочем пространстве MATLAB.
Результаты анализа можно присвоить переменным в строке оператора. Переменная, назначенная в операторе, создается в базовом рабочем пространстве MATLAB.
MATLAB не требует инициализации переменных, созданных в операторе.
Можно хранить стандартный выход из функций MATLAB и сообщений об ошибке в буферах потоков.
Этот пример кода использует MATLABEngine::eval для вычисления ряда выражений MATLAB. Эти операторы:
Вот эквивалентный код MATLAB.
[X, Y] = meshgrid(-2:0.2:2); Z = X .* exp(-X.^2 - Y.^2); surf(Z) print('SurfaceGraph', '-djpeg') currentFolder = pwd;
Вот код С++ для выполнения этих операторов в MATLAB.
#include "MatlabDataArray.hpp" #include "MatlabEngine.hpp" #include <iostream>
void evalSurfaceGraph() {
// Evaluate functions in MATLAB
using namespace matlab::engine;
// Start MATLAB engine synchronously
std::unique_ptr<MATLABEngine> matlabPtr = startMATLAB();
// Evaluate commands in MATLAB
matlabPtr->eval(u"[X, Y] = meshgrid(-2:0.2:2);");
matlabPtr->eval(u"Z = X .* exp(-X.^2 - Y.^2);");
matlabPtr->eval(u"surf(Z)");
matlabPtr->eval(u"print('SurfaceGraph', '-djpeg')");
matlabPtr->eval(u"currentFolder = pwd;");
// Get the name of the folder containing the jpeg file
matlab::data::CharArray currentFolder = matlabPtr->getVariable(u"currentFolder");
std::cout << "SurfaceGraph.jpg written to this folder: " <<
currentFolder.toAscii() << std::endl;
}Для получения информации о том, как настроить и создать программы C++ engine, смотрите Сборка программ C++ Engine.