WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Fehler in connect (Control System Toolbox)?

 

TimJim
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 20.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.03.2008, 20:58     Titel: Fehler in connect (Control System Toolbox)?
  Antworten mit Zitat      
Hallo!
Wenn ich das Beispiel aus der MATLAB Hilfe zum Befehl "connect" aus der Control System Toolbox ausführe, dann bekomme ich ein anderes Ergebnis als auf der Hilfeseite angegeben. Alles nur per Copy&Paste, zweimal überprüft, ob alles richtig kopiert wurde.

Ich verwende Matlab 7.1 R14 SP3, falls das irgendwie relevant ist.

Ich geb hier einfach mal das M-File an, könnt' ihr das mal durchlaufen lassen und das Ergebnis vergleichen?

Code:
% Beispiel-Code aus der Hilfeseite zu connect, Matlab 7.1 R14 SP3
A = [ -9.0201  17.7791
      -1.6943  3.2138 ];
B = [ -.5112  .5362
      -.002  -1.8470];
C = [ -3.2897  2.4544
      -13.5009  18.0745];
D = [-.5476  -.1410
     -.6459  .2958 ];
 
sys1 = tf(10,[1 5],'inputname','uc');
sys2 = ss(A,B,C,D,'inputname',{'u1' 'u2'},...
                    'outputname',{'y1' 'y2'});
sys3 = zpk(-1,-2,2);
sys = append(sys1,sys2,sys3);

Q = [3 1 -4
     4 3  0];
 
inputs = [1 2];
outputs = [2 3];

sysc = connect(sys,Q,inputs,outputs)


So, und nun das Entscheidende. Zunächst mal die Ausgabe von meinen eigenen Berechnung:

Code:
% Eigene Berechnung mit MATLAB
a =
            x1       x2       x3       x4
   x1       -5        0        0        0
   x2   0.8422  0.07664    5.601   0.3369
   x3   -2.901   -33.03    45.16    -1.16
   x4   0.9293   -16.97    22.71   -1.628
 
b =
            uc       u1
   x1        4        0
   x2        0   -0.076
   x3        0   -1.501
   x4        0  -0.8116
 
c =
             x1        x2        x3        x4
   y1   -0.2215    -5.682     5.657  -0.08859
   y2    0.4646    -8.483     11.36    0.1859
 
d =
            uc       u1
   y1        0   -0.662
   y2        0  -0.4058
 
Continuous-time model.


Und jetzt die Ausgabe, die in der Hilfe angezeigt wird. Zu beachten ist, dass dort die Werte in Abhängigkeit der Zustandsvariable x4 abweichen, alle anderen sind gleich, abgesehen von Rundungsungenauigkeiten:

Code:
% Ergebnis aus der Hilfe
a =
                        x1           x2           x3           x4
           x1           -5            0            0            0
           x2      0.84223     0.076636       5.6007      0.47644
           x3      -2.9012      -33.029       45.164      -1.6411
           x4      0.65708      -11.996        16.06      -1.6283
 
b =
                        uc           u1
           x1            4            0
           x2            0    -0.076001
           x3            0      -1.5011
           x4            0     -0.57391
 
c =
                        x1           x2           x3           x4
           y1     -0.22148      -5.6818       5.6568     -0.12529
           y2      0.46463      -8.4826       11.356      0.26283
 
d =
                        uc           u1
           y1            0     -0.66204
           y2            0     -0.40582
 
Continuous-time system.


Was ist da los? Wie kann es zu diesen Abweichungen kommen? Ich hab die connect-Funktion übrigens auch in Maple nachgebaut, weil ich symboliche Werte benötige. Das Komische daran ist, dass die Maple-Ausgabe mit den Werte aus der Hilfeseite übereinstimmen! D.h. wenn ich bei der Umsetzung in Maple keine Fehler gemacht habe, dann ist die Matlab-Berechnung falsch. Oder kann es sein, dass falsche Einstellungen die Rechenweise ändern? Ich allerdings bei Matlab nach der Installation nichts verändert.

Das die Funktion connect falsch rechnet, kommt mir allerdings auch unwahrscheinlich vor, dass hätte ja jem. merken müssen. Wo ist hier also der Haken an der Sache?

Danke!
Private Nachricht senden Benutzer-Profile anzeigen


TimJim
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 20.03.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.03.2008, 16:31     Titel:
  Antworten mit Zitat      
So, ich hab den Fehler an einer Stelle gefunden, die ich nicht vermutet habe Smile

Wenn man das M-File nach sys = append(sys1,sys2,sys3) abbricht, dann merkt man, dass das berechnete System nicht dem in der Hilfe angegebenen (Zwischen-)System gleicht! In der Hilfe sind zwei Einträge mit +/-1.4142 in der Matrix, die eigentlich 2/-1 sein müssten.

Die Hilfeseite rechnet den connect-Befehl nun aber mit dem falschen(!) Zwischenergebnis weiter. Dadurch kommt es zu den Unterschieden. Meiner Maple-Funktion hab ich nun auch nur das falsche Zwischenergebnis zugeführt, da ich nur den connect-Befehl umgesetzt hatte und nicht den append-Befehl.

Fazit: connect rechnet natürlich richtig, sowohl bei Matlab als auch bei meiner Maple-Variante. Bei der Hilfeseite wird ein falsches Zwischenergebnis berechnet (warum auch immer). Dieses Zwischnergebnis wird in connect eingesetzt und richtig berechnet. Jedoch hat das nichts mehr mit dem Ausgangssystem zu tun, das mit append zusammengefügt wurde. Ende gut alles gut. Zwei Tage in den Sand gesetzt für diesen blöden Fehler in der Hilfe.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.