[an error occurred while processing this directive]   Suche  
 

Schleifen und Gleichungen

Von 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.

Simulationsparameter

Beispiel 1:

Modell mit algebraischer Schleife

Obiges Modell enthält eine algebraische Schleife durch den Fcn- und IC-Block, denn wir haben beim Fcn-Block:
   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:
  • liefert (im Regelfalle) im Matlab Arbeitsfenster die Meldung:
    Warning: Block diagram 'untitled' contains 1 algebraic loop(s).
    Found algebraic loop containing block(s):
    'untitled/IC'
    'untitled/Fcn' (algebraic variable)
  • führt zur Lösung der algebraischen Gleichung u = cos(u) mit Hilfe eines Newton-Verfahrens mit einer Update-Formel. Das Lösungsverfahren können wir durch das Modell nicht beeinflussen.
Man kann sich bei obigem Modell fragen, welche Rolle dort die Simulationszeit spielt. Zu welchem Zeitpunkt wird die Gleichung gelöst? Wird sie nur einmal gelöst oder eventuell zu jedem Zeitpunkt?
Im Scope-Fenster sieht man:

Scope-Fenster des obigen Modells

was nur anzeigt, dass das Gleichungssystem zu jedem Zeitpunkt dieselbe Lösung hat, sie wird also schon zum erstmöglichen Zeitpunkt hinreichend exakt gelöst und die Lösung erstreckt sich nicht über ein Zeitintervall. Letzteres kann aber auch vorkommen, wenn spezielle Blöcke in der Schleife vorkommen, die ein bestimmtes Zeitverhalten erzwingen.

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 * un
Wir werden diese Parameter A und D gleich 0, die Parameter B und C gleich 1 setzen und erhalten damit:
   xn+1 = un
   yn = xn
Im Parameter-Fenster zu diesem Block, setzen wir ausserdem:
  • Anfangswert (Initial conditions): 0
  • Taktzeit (Sample time): 1

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:

Modell mit entkoppelter Schleife

und liefert im Scope-Fenster:

Iterationswerte der entkoppelten Schleife

Die Iterationsschritte lassen sich leicht nachrechnen:

tuxycos(y)
00001
11110.5403
20.54030.54030.54030.8576
30.85760.85760.85760.6543
..............

Beispiel 3:

Wir wollen den Lösungsprozess des nichtlinearen algebraischen Gleichungssystems:
   f(x) = x^2 - 2
mit 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.
  • wir wollen die einzelnen Newton-Schritte einzelnen Zeitpunkten zuordnen, zur Zeit n soll also der n. Newton-Schritt durchgeführt werden. Wir verwenden dazu den Discrete Time Integrator. Der DTI-Block ist ein Block mit diskretem Zeitverhalten, der jeweils zum Zeitpunkt n die Berechnung des n. Iterationsschrittes starten kann.
  • wir wollen jeweils nur einen Newton-Schritt zum gegebenen Zeitpunkt durchführen und müssen deshalb aufpassen, dass der Newton-Schritt nicht in einer algebraischen Schleife steht, denn sonst führt der Simulator von sich aus seine eigenen Iterationsschritte nach eigenen Regeln durch.
  • wir wollen die Newton-Iteration kontrolliert abbrechen, sobald die berechnete Korrektur dem Betrage nach kleiner als eine vorgegebene Schranke ausfält. Hierzu soll die Korrektur nach jedem Schritt geprüft werden.
Wenn wir den DTI-Block mit dem 'Vorwärts Euler Verfahren' verwenden, erfolgt die Aktualisierung von Ausgabewert y nach der Regel:
   yn+1 = yn + T * un
   xn+1 = yn+1
Das 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.
Das folgende Diagramm zeigt das entsprechende Modell. Bei den Block-Parametern zum DTI-Block wurde als Anfangsbedingung 2 und als Sample time 1 eingegeben. Die gelben Blöcke geben nur Daten aus, in hellblau sieht man die Abbruchbedingung für die Iteration. Die eigentliche Iterationsschleife enthält nur die beiden weissen Blöcke.

Newton Verfahren mit Vorwaerts Euler

Wie zu erwarten wird bei der Simulation keine Warnung ausgegeben und die Iteration wird abgebrochen, sobald das angegebene Abbruchkriterium erfüllt ist. Im Matlab-Arbeitsfenster können wir sehen, dass insgesamt 6 Iterationsschritte durchgeführt wurden:
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.

Scope-Fenster zum obigen Modell

Die berechneten Werte lassen sich leicht nachvollziehen:

n u x y-(x^2-2)/(2*x)
0 0 2 2 -0.5
1 -0.51.51.5 -0.0833
2-0.0833...... ...

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+1
Wie 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:

  • als Summationsverfahren 'Rückwärts Euler Summation' verwendet, was auch durch den Icon angezeigt wird.
  • als Abbruchkriterium 1.0e-4 gewählt

Iteration mit Rueckwaerts Euler

Da bei 'Rückwärts Euler Verfahren' das Ausgangssignal yk vom aktuellen Eingangssignal uk abhängt:
   yk = yk-1 + T*uk
und 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.

Scope-Fenster zum obigen Modell

Im Matlab-Arbeitsfenster können wir die Ergebnisse der einzelnen Iterationsschritte numerisch ausgeben lassen:
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.

Modell mit Integrator

Die Schleife beschreibt jetzt eine Differentialgleichung:
   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.

Scope-Fenster zum obigen Modell

Wie die Differentialgleichung gelöst wird, wird mit Hilfe der Simulations-Parameter festgelegt:

Simulationsparameter zum kontinuierlichen Modell

Bemerkung: Bei den Simulationsparametern kann man unter 'Solver' auch Verfahren wie 'ode23t (mod.stiff/Trapezoidal)' auswählen, das ist ein sogenanntes 'implizites' Lösungsverfahren für Differentialgleichungen. Solche Verfahren führen in jedem Integrationsschritt auf die Lösung eines Gleichungssystems und damit genau auf die Problematik, die wir als algebraische Schleifen kennengelernt haben. In diesen Fällen wird aber keine dementsprechende Warnung ausgegeben.