Вы можете передать переменные C++ в MATLAB® используя эти методы:
Передайте переменные как аргументы функции в вызовах к matlab::engine::MATLABEngine
feval или fevalAsync представители. Переменные, переданные в качестве аргументов в вызовы функций, не хранятся в базовом рабочем пространстве MATLAB. Для получения дополнительной информации см. раздел «Вызов функций MATLAB с C++».
Поместите переменные в основу MATLAB или глобальную рабочую область с помощью matlab::engine::MATLABEngine
setVariable и setVariableAsync представителя функции. Для получения дополнительной информации об использовании глобальных переменных в MATLAB, смотрите MATLAB global
функция.
Вы можете создать переменные в рабочем пространстве MATLAB с помощью matlab::engine::MATLABEngine
Функции eval и evalAsync представителя. Используйте эти функции для выполнения выражений MATLAB, которые присваивают переменным. Для получения дополнительной информации смотрите Оценка выражений MATLAB из C++.
Этот пример кода выполняет следующие шаги:
Помещает переменные в рабочее пространство MATLAB с помощью MATLABEngine::setVariable
Использует эти переменные для вызова MATLAB movsum
функция, использующая 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 matlab::data::TypedArray<double> data = factory.createArray<double>({ 1, 10 }, { 4, 8, 6, -1, -2, -3, -1, 3, 4, 5 }); matlab::data::TypedArray<int32_t> windowLength = factory.createScalar<int32_t>(3); matlab::data::CharArray name = factory.createCharArray("Endpoints"); matlab::data::CharArray 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++ Engine.
matlab::engine::MATLABEngine
| matlab::engine::startMATLAB