2016-05-26 5 views
1

Ich habe das neuronale Netzwerk in Matlab-Skript-Datei trainiert und gespeichert die Daten in eine .mat-Datei. Nachdem ich die .mat-Datei in Simulink-Benutzerfunktionen geladen hatte, konnte ich diese trainierten Daten verwenden, um die Eingaben zu testen. aber ich bekommeMATLAB Funktion Interface Fehler

Zeitfehler führen

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

und in Debugger der Fehler

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

Der Code ist als

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]); 

wenn jemand mir helfen könnte, diesen Fehler zu beheben.

Antwort

0

Das erste, was ich überprüfen würde, ist, dass Ihre Variable net eigentlich ein NN-Objekt ist. Die Syntax, die Sie für load verwenden, lädt alle Variablen in der Mat-Datei in eine Struktur namens net, und Sie müssen wahrscheinlich net.net verwenden, um die net-Variable aus der Struktur net zu extrahieren. (Natürlich, wenn das der Fall ist, sollten Sie nicht die Struktur (dh die Ausgabe von load) net anrufen, da es sehr verwirrend sein wird.

Allerdings würde ich vorschlagen, der beste Weg, dies zu tun ist, wickeln Sie Code in einer anderen Funktion, und diese Funktion von der Block-MATLAB-Funktion aufrufen dh

Machen Sie den Funktionsblock MATLAB so etwas wie:.

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]); 

Dann haben diese zusätzliche Funktion in einer separaten m-Datei:

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

Mit einer solchen Konfiguration können Sie den NN-Code unabhängig von Simulink ausführen und testen, aber bei Bedarf auch von Simulink aus aufrufen.