Evaluate MATLAB® statements from C++ using the MATLABEngine::eval
and MATLABEngine::evalAsync
member functions. These member functions are similar to the MATLAB
eval
function. The MATLABEngine::eval
and MATLABEngine::evalAsync
functions do not return the results of evaluating the MATLAB statement.
Use MATLABEngine::eval
and MATLABEngine::evalAsync
when you do not need to pass arguments from C++ or return values to C++. The statements that you execute with these functions can access variables in the MATLAB workspace.
Here are some things to know about evaluating statements in MATLAB.
These functions pass statements to MATLAB in as a matlab::engine::String
.
Convert an std::string
to a matlab::engine::String
using the u"…"
literal or the utility function matlab::engine::convertUTF8StringToUTF16String
.
The input arguments named in the string must exist in the MATLAB workspace.
You can assign the results of the evaluation to variables within the statement string. The variable that you assign in the statement is created in the MATLAB base workspace.
MATLAB does not require you to initialize the variables created in the statement.
You can store the standard output from MATLAB functions and error messages in stream buffers.
This sample code uses MATLABEngine::eval
to evaluate a series of MATLAB statements. These statements:
Here is the equivalent MATLAB code.
[X, Y] = meshgrid(-2:0.2:2); Z = X .* exp(-X.^2 - Y.^2); surf(Z) print('SurfaceGraph', '-djpeg') currentFolder = pwd;
Here is the C++ code to execute these statements in 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; }
For information on how to setup and build C++ engine programs, see Build C++ Engine Programs.