主要内容

用MEX函数实现MATLAB类方法

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

使用MEX函数方法:

  • 中定义MATLAB类文件夹,以便将方法包含在单独的文件中。看到单独文件中的方法

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

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

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

矩阵乘以标量的方法

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

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

下面是它的定义arrayMultiplier类。

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

下面是c++的MEX函数实现multiplyAllElements方法。

/* c++ MEX文件的MATLAB * returnbj = multiplyAllElements(obj, multiplier)修改对象属性。*将obj中的所有元素相乘。数据通过乘数。* *类方法实现为一个MEX函数* */ #include " MEX .hpp" #include "mexAdapter.hpp" using matlab:: MEX::ArgumentList;使用名称空间matlab::数据;类MexFunction: public matlab::mex::Function {std::shared_ptr matlabPtr = getEngine();public: void operator()(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)

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

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

= multiplyAllElements (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 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

另请参阅

|||

相关的话题