Вызовите функции MATLAB от MEX-функций

Вызовите функции MATLAB® от MEX-функций с помощью MATLAB:: механизм:: MATLABEngine:: функция feval. feval позволяет вам передать аргументы от MEX-функций до функций MATLAB и возвратить результаты к MEX-функции.

Следующие фрагменты кода требуют, чтобы эти определения использовали matlab::data::ArrayFactory и Engine API для C++.

matlab::data::ArrayFactory factory;
std::shared_ptr<matlab::engine::MATLABEngine> matlabPtr = getEngine();

Один Выход

Этот пример вызывает sqrt MATLAB функция со следующими входными параметрами:

  • Имя функции, переданное как строка UTF16

  • Входные параметры к sqrt функция в виде matlab::data::Array

Значением, возвращенным к MEX-функции, является четырехэлементный matlab::data::Array содержа квадратный корень из каждого элемента входного массива.

Пример перемещает возвращенное значение в matlab::data::TypedArray, который обеспечивает итераторы, используемые в основанном на области значений for цикл, который создает массив типа double от результатов, возвращенных sqrt MATLAB функция.

// Define input and output arguments
matlab::data::Array args({
    factory.createArray<double>({ 1, 4 },{ 1, 2, 3, 4 }) });
matlab::data::Array result;

// Call feval and return 1 argument
result = matlabPtr->feval(u"sqrt", args);
matlab::data::TypedArray<double> returnedValues(std::move(result));

// Create native array
double dataArray[4];
int i = 0;
for (auto elem : returnedValues) {
    dataArray[i] = elem;
    i++;
}

Несколько Выходных параметров

Некоторые функции MATLAB возвращают различные количества выходных параметров в зависимости от того, как вы вызываете функцию. Можно задать количество возвращенных аргументов при вызове функции MATLAB от MEX-функции.

Этот код вызывает gcd MATLAB функция со следующими входными параметрами:

  • Имя функции передало как строка UTF16

  • Количество выходных параметров, возвращенных функцией MATLAB в виде const size_t.

  • Входные параметры к gcd функция в виде std::vector из matlab::data::Array элементы.

Возвращенным значением является std::vector содержа три matlab::data::Array элементы.

// Define arguments
std::vector<matlab::data::Array> args({
    factory.createScalar<int16_t>(30),
    factory.createScalar<int16_t>(56)});
const size_t numReturned = 3;
std::vector<matlab::data::Array> result;

// Call feval and return 3 arguments
result = matlabPtr->feval(u"gcd", numReturned, args);

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

Похожие темы