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

Оценка операторов MATLAB

Оцените операторы MATLAB® с C++ с помощью функций членства MATLABEngine::evalAsync и MATLABEngine::eval. Эти функции членства подобны функции eval MATLAB. MATLABEngine::eval и функции MATLABEngine::evalAsync не возвращают результаты оценки оператора MATLAB.

Используйте MATLABEngine::eval и MATLABEngine::evalAsync, когда вы не должны будете передавать аргументы с C++ или возвращаемых значений на C++. Операторы, которые вы выполняете с этими функциями, могут переменные доступа в MATLAB workspace.

Вот некоторые вещи знать об оценке операторов в MATLAB.

  • Эти функции передают операторы MATLAB в как matlab::engine::String .

  • Преобразуйте std::string в matlab::engine::String с помощью литерала u"…" или служебной функции matlab::engine::convertUTF8StringToUTF16String .

  • Входные параметры, названные в строке, должны существовать в MATLAB workspace.

  • Можно присвоить результаты оценки к переменным в строке оператора. Переменная, которую вы присваиваете в операторе, создается в базовом рабочем пространстве 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;

Вот Код С++, чтобы выполнить эти операторы в 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++.

Смотрите также

Похожие темы

Была ли эта тема полезной?