2016-05-26 7 views
1

Я обучил нейронную сеть в файле сценария matlab и сохранил подготовленные данные в файле .mat. Чтобы после загрузки файла .mat в пользовательских функциях Simulink, я мог бы использовать полученные данные для тестирования входных данных. Но я получаю ошибку во время выполненияОшибка интерфейса функции MATLAB

Call to Matlab function aborted: Error calling Matlab function 'sim'. Press OK to open the debugger.

и отладчик ошибка является

MATLAB Function Interface Error: Error calling MATLAB function 'sim'. Block Neural Network Function (#108) While executing: none

Код в

function [tau1p,tau2p] = Nntwork(theta1,theta1d,theta2,theta2d,theta1dd,theta2dd) 
coder.extrinsic('load'); 
coder.extrinsic('sim'); 
net=load('trainednet.mat'); 
a=zeros(1,2); 
a=sim(net,[theta1;theta1d;theta1dd;theta2;theta2d;theta2dd]); 

если кто-нибудь может помочь мне решить эту ошибку.

ответ

0

Первое, что я проверил, это то, что ваша переменная net на самом деле является объектом NN. Синтаксис, который вы используете для load, загружает все переменные в файл мата в структуру с именем net, и вам, скорее всего, нужно будет использовать net.net для извлечения переменной net из структуры net. (Конечно, если это так, тогда вы не должны называть структуру (то есть вывод от load) net, так как это будет очень запутанно.

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

Сделать MATLAB функционального блока что-то вроде:.

function [tau1p,tau2p] = NntworkWrapper(theta1,theta1d,theta2,theta2d,theta1dd,theta2dd) 
coder.extrinsic('Nntwork'); 
a=zeros(1,2); 
a=Nntwork([theta1;theta1d;theta1dd;theta2;theta2d;theta2dd]); 

Тогда имеют эту дополнительную функцию в отдельном м-файле:

function a = Nntwork(theta_data) 
load('trainednet.mat'); 
a=sim(net,theta_data); 

Такая настройка позволит вам запустить и протестировать код NN независимо от Simulink, но также и вызвать его из Simulink при необходимости.