exponenta event banner

Установка и получение переменных MATLAB из MEX

Функции MEX могут помещать переменные в базовые и глобальные рабочие области MATLAB ® во время выполнения функций MEX. Функции MEX могут получать переменные из базы MATLAB и глобальных рабочих областей во время выполнения функции MEX .

Чтобы поместить переменные в базовую или глобальную рабочую область MATLAB из функций MEX, используйте функцию matlab:: engine:: MATLABEngine:: setVariable.

Чтобы получить переменные из базы MATLAB или глобальной рабочей области и включить их в функцию MEX, используйте функцию matlab:: engine:: MATLABEngine:: getVariable.

Получить переменную из рабочей области MATLAB

Предположим, что существует переменная с именем result в базовой рабочей области MATLAB. Эта переменная имеет тип double.

result =  1^3 + 5^3 + 3^3;

Чтобы получить result переменная из рабочей области MATLAB, вызов getVariable, которая возвращает переменную в виде matlab::data::Array.

#include "mex.hpp"
#include "mexAdapter.hpp"

using matlab::mex::ArgumentList;
using namespace matlab::engine;
using namespace matlab::data;

class MexFunction : public matlab::mex::Function {
    ArrayFactory factory;
    std::shared_ptr<matlab::engine::MATLABEngine> matlabPtr = getEngine();
public:
    void operator()(ArgumentList outputs, ArgumentList inputs) {
        Array result = matlabPtr->getVariable(u"result");
        double mexResult = std::move(result[0]);
    }
};

result переменная является общей копией result в рабочей области MATLAB. Используя std::move при назначении result в функции MEX в собственный double переменная mexResult отменяет совместное использование значения с переменной в рабочей области MATLAB.

Поместить переменную в рабочую область MATLAB

Функции MEX могут помещать переменные в базовую или глобальную рабочую область MATLAB. Если переменная с таким именем существует в указанной рабочей области, setVariable перезаписывает его.

Например, можно сделать переменную доступной из глобальной рабочей области MATLAB, чтобы любая функция MATLAB могла определить эту глобальную переменную.

Эта функция MEX создает глобальную переменную с именем mexGlobal. Значение этой переменной: 153.

#include "mex.hpp"
#include "mexAdapter.hpp"

using matlab::mex::ArgumentList;
using namespace matlab::engine;
using namespace matlab::data;

class MexFunction : public matlab::mex::Function {
    ArrayFactory factory;
    std::shared_ptr<matlab::engine::MATLABEngine> matlabPtr = getEngine();
public:
    void operator()(ArgumentList outputs, ArgumentList inputs) {
        Array val = factory.createScalar(153.0);
        matlabPtr->setVariable(u"mexGlobal", val, WorkspaceType::GLOBAL);
    }
};

Для доступа к глобальной переменной из функций MATLAB используйте global ключевое слово для определения переменной как глобальной в рабочей области функции.

function testMexGlobal
   global mexGlobal
   localVar = 1^3 + 5^3 + 3^3;
   if localVar == mexGlobal
      disp('Global found')
   end
end

Глобальные переменные совместно используются всеми функциями, объявляющими переменную глобальной. Любое изменение значения этой переменной в любой функции является видимым для всех функций, объявляющих ее глобальной.

Установка и получение кода примера переменной

Для полного примера использования matlab:: engine:: MATLABEngine:: getVariable загрузите эти два файла и следуйте инструкциям в файлах для построения и запуска функции MEX.

mexgetarray.cpp и mexgetarray.hpp.

См. также

Связанные темы