Передача переменных от C++ до MATLAB

Способы передать переменные

Можно передать переменные C++ MATLAB® с помощью этих методов:

  • Передайте переменные как аргументы функции в вызовах matlab::engine::MATLABEngine feval или fevalAsync функции членства. Переменные, переданные в качестве аргументов к вызовам функции, не хранятся в базовом рабочем пространстве MATLAB. Для получения дополнительной информации смотрите функции MATLAB Вызова с C++.

  • Поместите переменные в основу MATLAB или глобальную рабочую область с помощью matlab::engine::MATLABEngine setVariable и setVariableAsync функции членства. Для получения дополнительной информации об использовании глобальных переменных в MATLAB смотрите global MATLAB функция.

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

Помещение переменных в базовое рабочее пространство MATLAB

Этот пример кода выполняет эти шаги:

  • Помещает переменные в рабочее пространство MATLAB с помощью MATLABEngine::setVariable

  • Использование эти переменные, чтобы вызвать movsum MATLAB функция с помощью MATLABEngine::eval

  • Получает выходную переменную A от рабочего пространства MATLAB с помощью MATLABEngine::getVariable.

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

A = movsum([4 8 6 -1 -2 -3 -1 3 4 5],3,'Endpoints','discard');

Вот Код С++.

#include "MatlabDataArray.hpp"
#include "MatlabEngine.hpp"
#include <iostream>
void callputVariables() {
    using namespace matlab::engine;

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

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

    // Create variables    
    auto data = factory.createArray<double>({ 1, 10 },
        { 4, 8, 6, -1, -2, -3, -1, 3, 4, 5 });
    auto  windowLength = factory.createScalar<int32_t>(3);
    auto name = factory.createCharArray("Endpoints");
    auto value = factory.createCharArray("discard");
      
    // Put variables in the MATLAB workspace
    matlabPtr->setVariable(u"data", std::move(data));
    matlabPtr->setVariable(u"w", std::move(windowLength));
    matlabPtr->setVariable(u"n", std::move(name));
    matlabPtr->setVariable(u"v", std::move(value));

    // Call the MATLAB movsum function
    matlabPtr->eval(u"A = movsum(data, w, n, v);");

    // Get the result
    matlab::data::TypedArray<double> const A = matlabPtr->getVariable(u"A");
      
    // Display the result
    int i = 0;
    for (auto r : A) {
        std::cout << "results[" << i << "] = " << r << std::endl;
        ++i;
    }
}

Для получения информации о том, как установить и создать программы механизма C++, видит Сборку Программы Engine C++.

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

|

Похожие темы