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