exponenta event banner

Оценка операторов MATLAB из C++

Оценка ведомостей MATLAB

Оцените операторы MATLAB ® из C++ с помощью MATLABEngine::eval и MATLABEngine::evalAsync функции-члены. Эти функции-члены аналогичны MATLAB eval функция. 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 и сообщения об ошибках можно сохранить в потоковых буферах.

Оценка математической функции в MATLAB

Этот пример кода использует MATLABEngine::eval для оценки ряда операторов MATLAB. Эти утверждения:

  • Вычислить математическую функцию в указанной области с помощью meshgrid и exp.

  • Создание графика функции с помощью surf.

  • Экспорт графика в файл JPEG с помощью print.

Вот эквивалентный код MATLAB.

[X, Y] = meshgrid(-2:0.2:2);
Z = X .* exp(-X.^2 - Y.^2);
surf(Z)
print('SurfaceGraph', '-djpeg')
currentFolder = pwd;

Вот код C++ для выполнения этих инструкций в 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++ см. в разделе Сборка программ ядра C++.

См. также

Связанные темы