Integrate MATLAB Function in C++ Application - MATLAB & Simulink (original) (raw)

Main Content

This example shows how to create, build, and run a C++ application that calls a MATLAB® function using feval function. The C++ application code uses the MATLAB Engine API for C++ and the MATLAB Data API for C++ to work with MATLAB functions and data. The example calls the mex command to build the application using MATLAB.

Prerequisites

Create C++ Application That Calls MATLAB

This example uses MATLAB as a C++ development environment. This C++ code includes the header files for the MATLAB Engine and Data APIs for C++ as well as the standard input/output stream library. The code uses the engine API to start the MATLAB session and the data API to create a four-element double array. Thefeval function calls the MATLABsqrt function with the array as input. The code then displays the results of the feval function call.

For this example, save the code in a file namedtestFeval.cpp.

#include "MatlabDataArray.hpp"
#include "MatlabEngine.hpp"
#include <iostream>
void callSQRT() {

    using namespace matlab::engine;

    // Start MATLAB engine synchronously
    std::unique_ptr<MATLABEngine> matlabPtr = startMATLAB();

    // Create MATLAB data array factory
    matlab::data::ArrayFactory factory;

    // Define a four-element typed array
    matlab::data::TypedArray<double> const argArray = 
        factory.createArray({ 1,4 }, { -2.0, 2.0, 6.0, 8.0 });

    // Call MATLAB sqrt function on the data array
    matlab::data::Array const results = matlabPtr->feval(u"sqrt", argArray);

    // Display results
    for (int i = 0; i < results.getNumberOfElements(); i++) {
        double a = argArray[i];
        std::complex<double> v = results[i];
        double realPart = v.real();
        double imgPart = v.imag();
        std::cout << "Square root of " << a << " is " << 
            realPart << " + " << imgPart << "i" << std::endl;
    }
}

int main() {
    callSQRT();
    return 0;
}

Build C++ Application

Compile and link the testFeval application using themex function. This command saves the executable filetestFeval.exe in the current folder.

mex -v -client engine testFeval.cpp

Run C++ Application

To run your application, be sure to first configure your run-time environment by adding the appropriate environment variable to the specified path. For more information, see Run-Time Environment.

For example, if your matlabroot on Windows® is C:\Program Files\MATLAB\R2024b, then this system prompt command sets the run-time environment variable:

set PATH=C:\Program Files\MATLAB\R2024b\extern\bin\win64;%PATH%

Then run the application.

MATLAB returns a complex array to the C++ program because one of the numbers in the data array is negative, and then the C++ program displays the results.

Square root of -2 is 0 + 1.41421i Square root of 2 is 1.41421 + 0i Square root of 6 is 2.44949 + 0i Square root of 8 is 2.82843 + 0i

See Also

feval | mex

Topics