主要内容

用MEX函数实现MATLAB类方法

您可以使用MEX函数来实现MATLAB的方法®类。使用MEX函数使您能够将现有的c++算法和操作合并到类方法中,而无需重写MATLAB中的代码。

使用MEX函数方法:

  • 定义MATLAB类@文件夹,这样方法就可以包含在单独的文件中。看到单独文件中的方法

  • 实现MEX函数并将可执行文件放入类中@文件夹中。

  • 在类定义中引用MEX函数方法块。

  • 像调用任何方法一样调用MEX函数。

矩阵乘以标量的方法

arrayMultiplier类实现了multiplyAllElements方法作为MEX函数。

该类将二维数组存储在数据财产。的multiplyAllElements方法接受类实例和标量乘法器作为输入。方法中数组的元素相乘数据属性,并将结果赋给数据财产。因为arrayMultiplier类是一个值类multiplyAllElements方法返回修改后的对象。

这是定义arrayMultiplier类。

classdefarrayMultiplier包含数组和操作的对象%将数组的每个元素乘以一个输入%值。这个类演示了如何使用MEX函数%作为一种方法。属性数据(:,:) double {mustBeNonempty(Data)}= 1 (4);结束方法函数obj = arrayMultiplier(矩阵)%创建对象如果输入参数个数obj。数据= Matrix;结束结束实现了% multiplyAllElements方法%作为MEX函数obj = multiplyAllElements(obj,乘子)结束结束

这里是c++ MEX函数的实现multiplyAllElements方法。

/* c++ MEX文件for MATLAB * returnbj = multiplyAllElements(obj, multiplier)修改对象属性。*将obj中的所有元素相乘。数据乘法器。* *类方法实现为MEX函数* */ #include " MEX .hpp" #include "mexAdapter.hpp"使用matlab:: MEX::ArgumentList;使用命名空间matlab::data;类MexFunction:公共matlab::mex::Function {std::shared_ptr matlabPtr = getEngine();public: void操作符()(ArgumentList输出,ArgumentList输入){checkArguments(输出,输入);数组对象(输入[0]);双倍增器=输入[1][0];assignProperty(对象、乘数);//返回修改后的对象输出[0]= object; } void assignProperty(Array& obj, double multiplier) { // Get matrix from Data property TypedArray inMatrix = matlabPtr->getProperty(obj, u"Data"); // Multiply matrix by multiplier for (auto& elem : inMatrix) { elem *= multiplier; } // Set the property value matlabPtr->setProperty(obj, u"Data", inMatrix); } void checkArguments(matlab::mex::ArgumentList outputs, matlab::mex::ArgumentList inputs) { matlab::data::ArrayFactory factory; if (inputs.size() != 2) { matlabPtr->feval(u"error", 0, std::vector({ factory.createScalar("Two inputs required") })); } if ((inputs[1].getType() != matlab::data::ArrayType::DOUBLE) || (inputs[1].getNumberOfElements() != 1)) { matlabPtr->feval(u"error", 0, std::vector({ factory.createScalar("Input multiplier must be a noncomplex scalar double") })); } } };

要使用该方法,请创建该类的实例。的默认值数据属性是由表达式返回的4 × 4数组(4)

a = arrayMultiplier;a.Data
Ans = 1 1 1 1 1 1 1 1 1 1 1 1 1 1

使用multiplyAllElements方法将数组中的每个元素乘以一个标量值。将返回的对象赋值给相同的变量。

a = multiplyAllElements(a,6.25);a.Data
Ans = 6.2500 6.2500 6.2500 6.2500 6.2500 6.2500 6.2500 6.2500 6.2500 6.2500 6.2500 6.2500 6.2500 6.2500 6.2500 6.2500 6.2500 6.2500 6.2500 6.2500

另请参阅

|||

相关的话题