Переменные C++ можно передать в MATLAB ® с помощью следующих методов:
Передайте переменные в качестве аргументов функции в вызовах matlab::engine::MATLABEngine
feval или fevalAsync. Переменные, передаваемые в качестве аргументов вызовам функций, не хранятся в базовой рабочей области MATLAB. Для получения дополнительной информации см. Вызов функций MATLAB из C++.
Поместите переменные в базовую или глобальную рабочую область MATLAB с помощью matlab::engine::MATLABEngine
Функции-члены setVariateAsync и setVariityAsync. Дополнительные сведения об использовании глобальных переменных в 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');
Вот код C++.
#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++ см. в разделе Сборка программ ядра C++.
matlab::engine::MATLABEngine | matlab::engine::startMATLAB