主要内容

调用MATLAB来自MEX函数的函数

调用MATLAB®函数中使用matlab::引擎::MATLABEngine::函数宏指令函数。函数宏指令使您能够将参数从MEX函数传递给MATLAB函数,并将结果返回给MEX函数。

下面的代码片段需要这些定义来使用matlab:: data:: ArrayFactoryc++引擎API

matlab::数据::ArrayFactory工厂;std::shared_ptr matlabPtr = getEngine();

单输出

这个例子调用MATLAB√6函数与以下输入:

  • 函数名,作为UTF16字符串传递

  • 输入到√6函数,指定为matlab::数据::数组

返回给MEX函数的值有四个元素matlab::数据::数组包含输入数组中每个元素的平方根。

该示例将返回值移动到matlab:: data:: TypedArray,它提供基于范围的函数中使用的迭代器创建类型为数组的循环从MATLAB返回的结果√6函数。

//定义输入和输出参数matlab::数据::数组参数({工厂。createArray({1, 4},{1, 2, 3, 4})});matlab::数据::数组结果;//调用feval并返回1个参数result = matlabPtr->feval(u"sqrt", args);matlab::数据::TypedArray <二> returnedValues (std::移动(结果));//创建本地数组双dataArray [4];Int I = 0;for (auto elem: returnedValues) {dataArray[i] = elem;我+ +;}

多个输出

一些MATLAB函数根据调用函数的方式返回不同数量的输出。当从MEX函数调用MATLAB函数时,可以指定返回参数的数量。

这段代码调用MATLAB肾小球囊性肾病函数与以下输入:

  • 函数名作为UTF16字符串传递

  • MATLAB函数返回的输出数,指定为aconst size_t

  • 输入到肾小球囊性肾病函数,指定为std::向量matlab::数据::数组元素。

返回值为std::向量包含三个matlab::数据::数组元素。

/ /定义参数std::vector args({factory.createScalar(30), factory.createScalar(56)});const size_t numReturned = 3;std::向量数组< matlab::数据::>结果;//调用feval并返回3个参数结果= matlabPtr->feval(u"gcd", numReturned, args);

另请参阅

相关的话题