Simulink: Как я могу использовать экземпляры объектов из рабочей области во встроенной функции Matlab? - PullRequest
2 голосов
/ 12 апреля 2011

В этом случае у меня есть экземпляр нейронной сети (NN) в моей базовой рабочей области, который я хочу использовать в симуляции с Simulink. Я обернул использование NN во встроенной функции Matlab входными аргументами, которые должны использоваться сетью.

В принципе, я хотел бы сделать что-то вроде этого:

function XBDDprime = NN(F, XB, XBD, XBDD)
%#eml
global net;
XBDDprime = net([F XB XBD XBDD]');

Там, где целью является получение объекта net из базовой рабочей области (которая является экземпляром класса network).

Это колебание проблемы, в которой я использовал evalin для чтения переменной из рабочей области:

function XBDDprime = NN(F, XB, XBD, XBDD)
%#eml
eml.extrinsic('evalin');
net = evalin('base', 'net'); %Fetch net from workspace
XBDDprime = net([F XB XBD XBDD]'); %Error!

Это не компилируется, потому что кажется, что simulink думает, что net это массив, а net(...) это подписка на массив (фактическое сообщение об ошибке: подписка на mxArray не поддерживается).

Мне кажется, что Simulink необходимо иметь полное определение любого объекта, который использовался для компиляции встроенной функции matlab, верно? Есть ли решение? Могу ли я каким-то образом использовать Simulink.Signal, чтобы обернуть NN и добавить его в качестве аргумента в функциональный блок?

Редактировать

Я также пытался использовать load для загрузки сериализованного объекта net из файла. Это тоже не сработало. Кажется, это та же проблема, когда компилятор считает s mxArray.

function XBDDprime = NN(F, XB, XBD, XBDD)
%#eml
eml.extrinsic('load')
s = load('net');
XBDDprime = s.net([F XB XBD XBDD]');

Решение

Я, наконец, сдался и пошел к функциональному блоку matlab, который может выглядеть как любой из приведенных выше примеров.

Ответы [ 2 ]

1 голос
/ 12 апреля 2011

Вы можете определить параметр net как вход для функции NN и использовать блок From Workspace, чтобы добавить его в свою модель.Я не уверен, что это будет работать с блоком Embedded MATLAB function, возможно, вам придется переключиться на блок M Code.

0 голосов
/ 17 сентября 2011

Создать блок Simulink для моделирования нейронной сети. Синтаксис gensim (net, st). Для получения справки Введите help network / gensim.

...