Verfasst am: 04.05.2011, 23:55
Titel: Fehler in der Programmierung
Hi
ich soll automatisch die Parameter einer Sprungantwort ermitteln (Feder, Masse, Dämpfer). Dazu habe ich auf dem Realsystem eine Sprungantwort (sprungantwortreal) aufgenommen. Der erste teil des programms funktinoiert auch einwandfrei. Bei der Funktion allerdings funktioniert es nicht wirklich. Ich muss ja irgendwie das Simulationsmodell anpassen. aber wenn ich das lade, kommen folgende Fehlermeldungen:
??? Error using ==> objfun2 at 2
Error due to multiple causes.
Error in ==> fminsearch at 195
fv(:,1) = funfcn(x,varargin{:});
Error in ==> api2 at 28
p = fminsearch(@objfun,p0,[],u_id,y_id,t_id)
Caused by:
Error using ==> objfun at 2
Error evaluating parameter 'Gain' in 'Modell/Beschleunigung': Undefined function or method 'p' for input arguments of type 'double'.
Error using ==> objfun at 2
Error evaluating parameter 'Gain' in 'Modell/Dämpfungskraft': Undefined function or method 'p' for input arguments of type 'double'.
Error using ==> objfun at 2
Error evaluating parameter 'Gain' in 'Modell/Federkraft': Undefined function or method 'p' for input arguments of type 'double'.
Error using ==> objfun at 2
Error evaluating parameter 'Gain' in 'Modell/Reibkraft': Undefined function or method 'p' for input arguments of type 'double'.
Wenn ich anstelle der simulation eine übertragungsfunktion mache, funktioniert alles einwandfrei. Könnt ihr mir helfen? Wäre euch sehr dankbar.
Simulink schaut nur im base workspace ob es die Variablen gibt. p ist allerdings in diesem Fall nur lokal in der Funktion objfun definiert. Vor der Simulation musst du also p in den base workspace schreiben.
Hi Thomas
vielen dank für deine schnelle Antwort. da hast du natürlich recht, dass hatte ich total vergessen. Jodoch kommt jetzt eine noch merkwürdigere Fehlermeldung.
??? Error using ==> lsim at 89
Not enough input arguments.
Error in ==> objfun2 at 4
ysim=lsim(Modell,um,t);
Error in ==> fminsearch at 195
fv(:,1) = funfcn(x,varargin{:});
Error in ==> api2 at 28
p = fminsearch(@objfun2,p0,[],u_id,y_id,t_id)
Aber was will der denn noch haben?
In der Hilfe steht: LSIM(SYS,U,T)
hatte auch schon
das hatte ich ja noch gar nicht so genau betrachtet. Was bezweckst du denn mit diesen Zeilen? Wo kommt denn tout,xout und yout her?
Für lsim sollte S eine Übertragungsfunktion sein und keine Matrix.
Hi
tout,xout,yout kommen aus der Simulation.
Aber wenn du sagst, dass S eine übertragungsfunktion sein muss, weiß ich ein bisschen mehr. Vielen dank schon mal dafür. Allerdings muss ich ein Simulink Modell vergleichen, kann ich dass überhaupt damit machen? oder muss ich da einen ganz anderen weg einschlagen?
Calle
ich habe auch mal versucht mit dem Befehl G=tf(Modell) die übertragungsfunktion des Modells zu bekommen, jedoch hat das nicht wirklich funktioniert.
>> G=tf(Modell)
Transfer function from input to output...
#1: 2
#2: 0
#3: 1
#4: 0
#5: 0
#6: 0
#7: 2
??? Error using ==> minus
Matrix dimensions must agree.
Error in ==> objfun2 at 8
J=sum((ym-ysim).^2);
Error in ==> fminsearch at 195
fv(:,1) = funfcn(x,varargin{:});
Error in ==> api2 at 26
p = fminsearch(@objfun2,p0,[],u_id,y_id,t_id)
Wenn ich mir eine "Übertragungsfunktion" aussuchen würde (z.B. G(1,1)) (obwohl ich da nicht wirklich eine erkenne) gibt er mir nur die anfangsparameter aus.
Ich versteh noch nicht was du eigentlich machen willst.
Willst du die Parameter p an deine Messwerte anpassen?
Willst du dein Simulink Modell auf verschiedene Arten simulieren?
Genau, meine werte p möchte ich gerne anpassen. da in diesem Vekter die Parameter [Masse Dämpferkonstante Federkonstante Reibwert] stehen, die ermittelt werden müssen.
Calle
Ich hatte ein beispielprogramm bekmmen, womit dass mit lsim gemacht wurde. Allerdings wurde es da auch mit einer Übertragungsfunktion gemacht. Ich hatte gedacht, dass ich das für ein Modell auch benutzen kann. Dem ist wohl nciht so. Habe ein paar neue gedanken, die aber noch fehlerhaft sind.
das ysim bekomme ich aus dem Simulink-Modell, kann man dort irgendwo einstellen, wie groß der Vektor sein soll? Man muss ja im Prinzip die Abtastfrequenz erhöhen, jedoch habe ich da nichts zu gefunden.
Hi
der aufruf von fminsearch hat so funktioniert wie er war, aber so wie du das dahingeschrieben hast, funktioniert es auch. Das mit p0 hatte ich schon geändert. Alles funktioniert fast so wie es soll. Außer die Zeit hat nicht funktioniert, da in der Simulation nach 1s gestartet wurde und im realsystem bei ca 1.14s. Da habe ich für die Zeit einfach noch eine variable eingefügt.
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.