connect Control System Toolb. < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) reagiert/warte auf Reaktion | Datum: | 14:03 Fr 21.03.2008 | Autor: | TimJim |
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.
Inzwischen schon auf zwei Versionen getestet: Matlab 7.1 R14 SP3 und Matlab 2007b.
Ich geb hier einfach mal das M-File an. Könnt' ihr das mal durchlaufen lassen und das Ergebnis vergleichen?
%----------------------------
% Beispiel-Code aus der Hilfeseite zu connect, Matlab 7.1 R14 + R2007b
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:
%----------------------------
% Eigene Berechnung mit MATLAB, gekürzt auf die ersten beiden Matrizen
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
%----------------------------
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:
%----------------------------
% Ergebnis aus der Hilfe, gekürzt auf die ersten beiden Matrizen
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
%----------------------------
Was ist da los? Wie kann es zu diesen Abweichungen kommen? Ich hab die connect-Funktion übrigens 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 hab allerdings bei Matlab nach der Installation nichts verändert.
Dass 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 für die Tipps!
Ich habe diese Frage auch in folgenden Foren auf anderen Internetseiten gestellt:
http://matheplanet.com/default3.html?topic=99692=41003
http://www.gomatlab.de/fehler-in-connect-control-system-toolbox-t1217.html
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 16:35 Fr 21.03.2008 | Autor: | TimJim |
So, ich hab den Fehler an einer Stelle gefunden, die ich nicht vermutet habe :)
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.
|
|
|
|