[an error occurred while processing this directive]
Schleifen und GleichungenVon grundlegender Bedeutung für die Simulink Modellierung ist das Verständnis von Schleifen im Modell und deren Wirkung. Solche Schleifen können zu Situationen führen, in denen Simulink eine Gleichung löst, müssen es aber nicht. Bei einem Simulink-Blöck hängt üblicherweise das Ausgangssignal zum Zeitpunkt tn vom Eingangssignal zu diesem Zeitpunkt ab, bei Schleifen kann es nun passieren, dass das Eingangssignal auch vom gleichzeitigen Ausgangssignal abhängt. In der Simulink-Literatur wird dies mit direct feedthrough bezeichnet und man findet eine entsprechende Bemerkung bei der Beschreibung jedes Blockes. Schleifen, die ausschließlich solche Blöcke enthalten, führen zu der genannten Situation, sie werden in der Simulink-Literatur als algebraic loop (algebraische Schleife) bezeichnet und führen zu einer entsprechenden Warnung im Matlab Arbeitsfenster, sofern diese Warnungen nicht durch eine entsprechende Einstellung der Simulationsparameter unterdrückt wird.
Beispiel 1:
yFcn = cos(uFcn)und beim IC-Block: yIC = uIC = yFcn = cos(uFcn)und damit wieder beim Fcn-Block: uFcn = yIC = cos(uFcn)Die Schleife beschreibt daher die Gleichung: u = cos(u) Der IC-Block hat nur die Funktion einen Anfangswert für das betreffende Signal in einer algebraischen Schleife zu setzen. Die algebraische Schleife wird vom Simulator erkannt und:
Im Scope-Fenster sieht man:
Beispiel 2:Wir wollen das Gleichungssystem aus Beispiel 1 einmal mit unserem eigenen Iterationsverfahren:un+1 = cos(un)behandeln. Das bedeutet, dass wir algebraische Schleifen vermeiden müssen, also Eingabe- und Ausgabsignal irgendwo in der Schleife entkoppeln müssen. Wir verwenden dazu den Discrete State Space (DSS) Block. Dies ist ein recht einfacher Block mit diskretem Zeitverhalten, dessen Funktion schon aus seinem Icon hervorgeht. xn+1 = A * xn + B * un yn = C * xn + D * unWir werden diese Parameter A und D gleich 0, die Parameter B und C gleich 1 setzen und erhalten damit: xn+1 = un yn = xnIm Parameter-Fenster zu diesem Block, setzen wir ausserdem:
Der DSS-Block bettet die Schleife zunächst in die Simulationszeit ein, er speichert das Ausgangssignal des Fcn-Blockes über ein Taktintervall und schickt es erst mit einem Takt Verzögerung wieder zum Fcn-Block. Damit haben wir beim Fcn-Block: yn:Fcn = cos(un:Fcn)und beim IC-Block: yn:IC = un-1:IC = yn-1:Fcn = cos(un-1:Fcn)und damit wieder beim Fcn-Block: un:Fcn = yn:IC = cos(un-1:Fcn)Die Schleife beschreibt daher eine Folge arithmetischer Ausdrücke, die problemlos Schritt für Schritt berechnet werden können. Durchgeführt wird genau das Iterationsverfahren: un+1 = cos(un) Das Modell lautet:
Beispiel 3:Wir wollen den Lösungsprozess des nichtlinearen algebraischen Gleichungssystems:f(x) = x^2 - 2mit dem Newton-Verfahren simulieren. xn+1 = xn - f(xn)/f'(xn)Das Problem ist ähnlich zu dem aus Beispiel 2. Es sei betont, dass dies normalerweise keine Aufgabe ist, die man mit Simulink durchführen wird. Wir wollen an diesem und dem folgenden Problem nur zeigen, dass die Veränderung einzelner Parameter eines Blockes, dessen Auswirkungen auf Schleifen grundsätzlich ändern können.
yn+1 = yn + T * un xn+1 = yn+1Das bedeutet, dass zu jedem Zeitpunkt der Ausgangswert yn+1 nur von alten Werten abhängt, nicht vom aktuellen Eingangswert un+1, folglich werden algebraische Schleifen unterbunden.
Wir können problemlos den momentanen Ort der Newton-Iteration als Zustandswert
wählen, dieser Wert dient beim DTI-Block auch als Ausgangswert, aus ihm wird die
Newton-Korrektur berechnet, die dann wieder als Eingangswert für den DTI-Block
dient.
simout =
2.000000000000000e+000
1.500000000000000e+000
1.416666666666667e+000
1.414215686274510e+000
1.414213562374690e+000
1.414213562373095e+000
Wir können auch mit der Stop time die Iteration nach einer vorgegebenen Zahl von Iterationsschritten abbrechen, sofern nicht zuvor das eingebaute Abbruchkriterium wirksam wird.
Beispiel 4:Der DTI-Block bietet neben der 'Vorwärts Euler' Summation auch die 'Rückwärts Euler' Summation an, die nach folgenden Regeln arbeitet:yn+1 = yn + T * un+1 xn+1 = yn+1Wie bei der 'Vorwärts Euler Summation' sind neuer Zustands- und Ausgangsvektor gleich, im Gegensatz zur 'Vorwärts Euler Summation' wird hier aber zur Berechnung der aktuellen Werte von Zustands- und Ausgabevektor der aktuelle Eingabevektor benutzt, der vom aktuellen Ausgabewert abhängen kann. Wir haben hier eine 'direct feedthrough' Situation und daraus kann eine algebraische Schleife resultieren. Im folgenden Modell wurden:
yk = yk-1 + T*ukund das aktuelle Eingangssignal uk seinerseits vom aktuellen Ausgangssignal yk abhängt: uk = -(yk2-2)/(2*yk)haben wir eine algebraische Schleife, die die Gleichung: yk = yk-1 - T*(yk2-2)/(2*yk)beschreibt. Die Korrektur in einem Iterationsschritt soll also so bestimmt werden, dass sie der Newton-Korrektur am Zielort entspricht. Der Simulator löst diese Gleichung mit internen Methoden. Jeder Iterationsschritt liefert eine algebraische Schleife und die damit verbundene Gleichungsauflösung. Da wir das interne Verfahren zur Gleichungsauflösung nicht genau kennen, können wir die einzelnen Iterationsschritte auch nicht nachvollziehen. Insbesondere wird hier kein Newton-Verfahren durchgeführt. Was wir am Scope-Fenster sehen ist, dass mit diesem Verfahren deutlich mehr Iterationsschritte notwendig werden, obwohl wir das Abbruchkriterium schon deutlich gelockert haben. Letzteres wirkt sich nur auf die Iterationsschleife, nicht auf die algebraische Schleife innerhalb jedes Iterationsschrittes aus.
simout =
2.000000000000000e+000
1.720759220056126e+000
1.571418072148497e+000
1.493877886076848e+000
1.454322263327204e+000
1.434338505203779e+000
1.424293869396642e+000
1.419258198570684e+000
1.416737004138160e+000
1.415475564547924e+000
1.414844633830636e+000
1.414529115700284e+000
1.414371343437031e+000
1.414292454005256e+000
Als Faszit bleibt: Algebraische Schleifen werden mit internen
Methoden gelöst, wir können die Gleichungen beschreiben,
können aber keinen Einfluss auf das Lösungsverfahren nehmen.
Beispiel 5:Eine neue Art von Schleifen entsteht, wenn wir den DTI-Block durch durch einen kontinuierlich arbeitenden Integrator ersetzen.
y'(t) = (y(t)^2 - 2)/(2*y(t))und ist keine algebraische Schleife, daher wird auch keine Warnung ausgegeben. Die Berechnung der Differentialgleichung erfolgt in der simulierten Zeit. Die Lösung der Differentialgleichung strebt mit wachsender Zeit t gegen Wurzel aus 2. Das Scope-Fenster zeigt, dass die Iteration aufgrund des Abbruchkriteriums etwa zur Zeit 13 abgebrochen wird. Da die einzelnen Integrationsschritte relativ klein sind, wird der Wert des Abbruchkriteriums ziemlich genau erreicht.
|