Вызовите функции 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);

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

Похожие темы