Konditionierung von Differentialgleichungen im Analogrechner

Rainer Glaschick, Paderborn
2014-02-13

Einleitung

Bei der Programmierung von Analogrechnern ist, wie auch bei der Programmierung von Mikrokontrollern und anderen Rechnern mit Festkomma-Arithmetik, eine Konditionierung notwendig, damit die Rechenvariablen im Rechenbereich liegen und dennoch der gegebene Zahlenraum möglichst ausschöpft wird, um Fehler gering zu halten. Bei Digitalrechnern sind das im wesentlichen Rundungsfehler, bei Analogrechnern Rauschen und Linearitätsfehler.

Die Standardwerke zur Analogrechnetechnik widmen meist nur wenige Seiten der Konditionierung. Dabei steht immer die Abbildung von physikalischen (oder chemischen) Größen so auf die Rechenvariablen im Vordergrund, dass die Rechenvariablen im Bereicht ±1 liegen. In der Regel ist die Zeit die primäre unabhängige Variable, so dass eine Zeittransformation unter dem Aspekt der Simulation, d.h. ob Echtzeit, Zeitlupe oder Zeitraffer, betrachtet wird. Zudem ist dort der Wertebereich der anderen Variablen zumindest ungefähr bekannt und ohnehin nicht variiert werden; es ist also lediglich der Transformationsfaktor einen jeden physikalischen Größe in den Breich ±1 anzugeben. Ob die damit entstehenden Gleichungssyteme bzw. Rechenprogramme überhaupt numerisch brauchbar sind, kann normalerweise nur im Einzelfall bewertet werden.

Falls jedoch die zu lösenden (Differential-) Gleichungssysteme nur mathematisch-numerisch ohne ein physikalisches (oder ökonomisches) Modell vorliegen, sind die Randbedingungen in der Regel weniger genau bekannt.

Gleiches gilt, wenn in dem zu modellierenden System die Zeit keine primäre Variable ist. Differentialgleichungen mit einer Variablen, nach der differenziert wird, fallen meist nicht darunter, sofern diese Variable als monoton angesehen werden kann.

Im folgenden wird daher mit Konditionierung1 allgemein eine Transformation der Variablen bezeichnet, die mathematisch die Lösung nicht verändert, d.h. die Transformation der (Differential-) Gleichungen in solche, die — nach einer Rücktransformation — die ursprünglichen Ergbenisse liefern. Das Verb skalieren wird für eine lineare Transformation, d.h. die Multiplikation mit einem Faktor, verwendet.

Beispiel Lorenz-Attraktor

Der Lorenz-Atraktor (siehe [Jung] und [Wikipedia]) ist durch ein relativ einfaches System von Differentialgleichungen mit drei Variablen allgemein definiert als:

    `dot x = s y - s x
    `dot y = r x - x z - y
    `dot z = x y - b z

Als Parameter entsprechend dem physikalischen Hintergrund werden üblicherweise verwendet:

    `s=10
    `r=28
    `b=8/3=2.67

so dass die Gleichungen lauten:

    `dot x = 10 y - 10 x
    `dot y = 28 x - x z - y
    `dot z = x y - 2.67 z

Nach [Jung] muss bei den o.a. Werten für s und b gelten: `r > 470/19 = 25.74`, weil sich ansonsten stationäre Lösungen einstellen.

Soll dieser Satz von Differentialgleichungen auf einem Analogrechner berechnet werden, so ist sicher zu stellen, dass die Rechenvariablen stets dem Betrag nach kleiner als 1 sind. Dies gilt zwar nicht für die einzelnen Faktoren auf den rechten Seiten der Gleichungen; es darf lediglich die aktuelle Summe 1 nicht überschreiten. es ist dennoch ratsam, damit anzufangen, dass alle Variablen stets kleiner 1 sind.

Koeffizienten größer als 10 sind weniger erstrebenswert; zwar sind meist ein oder zwei Eingänge mit dem Gewicht 10 vorhanden, so dass ein Faktor bis 20 einstellbar ist.

Als ersten Ansatz könnte man dennoch die Summanden auf Werte kleiner 1 beschränken, das ergäbe:

    `|x| < 0.03
    `|y| < 0.1
    `|z| < 0.4

Für die erste Gleichung ist dies zu restriktiv; hier reicht es, wenn — wie es hier der Fall ist — die Differenz `|x-y|` stets < 0.1 ist; aus der zweiten und dritten Gleichung sind aber die Restriktionen für `x` und `z` im wesentlichen unverändert.

Das wäre für `x` ziemlich schlecht konditioniert, da einige Multiplizierer um den Nullpunkt große Fehler verursachen.

Bei der von [Horowitz] beschriebenen direkten Realisierung mit Widerständen und Operationsverstärkern unterliegen die Koeffizienten kaum Beschränkungen, da die Eingangswiderstände sehr klein und damit die Faktoren sehr groß gemacht werden könnnen. Dennoch bleibt auch hier die Beschränkung, dass die Spannungen im Bereich ±10V bleiben müssen.

Intuitive Skalierung

Aus dem im Anhang gezeigten Graph der Lösungsfunktion kann man entnehmen, dass die Werte für x im Intervall ±20 liegen, die für y im Intervall ±25, und die für z immer positiv sind und maximal 50 erreichen können.

Also liegt es nahe, die Variablen mit diesen Maximalwerten zu normieren, damit die neuen Werte nunmehr betragsmäßig kleiner 1 sind:

    `x rarr 20 x
    `y rarr 25 y
    `z rarr 50 z

Dies ist eine abgekürzte Schreibweise dafür, dass die Variable `x` in den Formeln durch `20 xi` ersetzt wird und dann wieder `xi` durch `x`; das ergibt:

    `20 dot x = 10*25 y - 10*20 x
    `25 dot y = 28*20 x - 20*50 x z - 25 y
    `50 dot z = 20*25 x y - 2.67*50 z

also:

    `dot x = 12.5 y - 10x
    `dot y = 22.4 x - 40 x z - y
    `dot z = 10 x y - 2.67 z

Das eigentliche Ziel, die großen Koeffizienten zu vermeiden, wird so also nicht erreicht.

Konditionierungen

Konditionierungen können durch Transformation im Zeitbereich und der Variablen erfolgen.

Zeitkonditionierung

Integratoren (nach der Zeit) benötigen immer die Angabe einer Zeitkonstanten, die das Integral der (Summe der) Eingangsvariablen mit der Ausgangsvariablen verknüpft; meist sind dies glatte Werte wie 1/sec oder 10/sec oder 100/sec. Dies ist deshalb möglich, weil ein für alle Eingänge gleicher Faktor ein Stauchen oder Dehnen der Zeit bedeutet. Wenn also eine Zeitkonstante von 1/sec auf 2/sec verkleinert werden soll, dann sind alle Eingänge mit dem Faktor 2 zu bewerten.

Ein Integrator wird allgemein beschrieben durch eine Gleichung der Form

    `x = - tau int sum v_i dt

oder

    `1/tau dot x = - sum v_i

Vereinfacht kann man schreiben

    `dot x = - sum v_i

und impliziert eine für alle Integratoren gleiche Zeitkonstante. (In dem von Adler verwendeten Heaviside-Kalkül ist dies besser sichtbar, aber, da ungewohnt, nicht unbedingt übersichtlicher.)

Wird die Zeitkonstante um den Faktor `lambda` erhöht, dann ergibt sich

    `1/(lambda tau) dot x = - sum v_i

oder in unserem Fall, wenn alle Ableitungen auf der linken Seite einzeln stehen,

    `1/tau dot x = -lambda sum v_i

Damit bewirkt eine Zeittransformation erstaunlicherweise, dass alle Koeffizienten uniform mit einem Faktor multipliziert werden. Auf den zweiten Blick ist das nicht so erstaunlich, da die Determinante der Koeffizienten auf der rechten Seite von dieser Operation unbeeinflusst ist und damit auch die relativen Werte der Variablen untereinander.

Eine Zeittransformation durch Division durch 10 (`lambda = 1/10`) ergibt dann für das Beispiel:

    `dot x = y - x
    `dot y = 2.80 x - 0.10 x z - 0.10 y
    `dot z = 0.10 x y - 0.267 z

Dies ist auf den ersten Blick ein wesentlicher Fortschritt, da nunmehr die Koeffizienten günstige Werte aufweisen. Da es sich aber lediglich um eine Zeittransformation handelt, bleiben die Werte für die Rechenvariablen unverändert, und es sind Bereichsüberschreitungen weiterhin zu erwarten.

Bei der Analyse der Wertebereiche sind Multiplikationen wenig problematisch, wenn die Faktoren beide kleiner als Eins sind, da das Produkt dann kleiner als die Faktoren ist. Sind hingegen die Faktoren größer Eins, so ist das Produkt wesentlich größer als die Faktoren.

Variablenkonditionierung

Bei der Variablenkonditionierung werden alle Variablen durch ein Vielfaches oder einen Bruchteil ersetzt, ggf. auch durch eine additive Konstante.

Uniforme Konditionierung

Hier werden alle Variablen mit demselben Faktor skaliert:

    `x rarr alpha x
    `y rarr alpha y
    `z rarr alpha z

Die Ableitungen werden mit dem gleichen Faktor skaliert:

    `dot x rarr alpha dot x
    `dot y rarr alpha dot y
    `dot z rarr alpha dot z

Das ergibt

    `alpha dot x = s alpha y - s alpha x
    `alpha dot y = r alpha x - alpha^2 x z - alpha y
    `alpha dot z = alpha^2 x y - b alpha z

nach Division durch `alpha`:

    `dot x = s y - s x
    `dot y = r x - alpha x z - y
    `dot z = alpha x y - b z

also:

    `dot x = 10 y - 10 x
    `dot y = 28 x - alpha x z - y
    `dot z = alpha x y - 8/3 z

Hier ändert sich nicht für die konstanten Koeffizenten, aber für alle Multiplikationen ist der Faktor anzuwenden.

Man kann also durch eine uniforme Variablenskalierung gezielt die Faktoren vor den Multiplikationen beeinflussen.

Wendet man eine Zeittransformation mit `1/10` und eine uniforme Variablenskalierung mit `alpha=50` an, so werden auf diese Art die ungünstigen Faktoren vor den Multiplikationen entfernt:

    `dot x = y - x
    `dot y = 2.8 x - 5 x z - 0.1 y
    `dot z = 5 x y - 0.27 z

Mit diesen Faktoren ist dann `z<1` und die beiden anderen Variablen sind im Maximum größer etwa 0.5.

Häufig wird auch mit 100 skaliert, dass ergibt dann den Faktor 10 vor den Multiplikationen und nur ein halbe Aussteuerung; da der Faktor 10 aber bei üblichen Analogrechnern kein Koeffizientenpotentiometer erfordert, ist diese Konditionierung durchaus beliebt.

Individuelle faktorielle Skalierung

Nimmt man für jede Variable einen eigenen Skalierungsfaktor, also:

    `x rarr alpha x
    `y rarr beta y
    `z rarr gamma z

dann wird allgemein

    `alpha dot x = beta s y - alpha s x
    `beta dot y = alpha r x - alpha gamma x z - beta y
    `gamma dot z = alpha beta x y - gamma b z

oder

    `dot x = beta/alpha s y - s x
    `dot y = alpha/beta r x - (alpha gamma)/beta x z - y
    `dot z = (alpha beta)/gamma x y - b z

Ersichtlich werden insbesondere nicht die Koeffzienten der Dämpfungen, d.h. der Rückkopplungen auf den eigenen Eingang, verändert; hierzu wird eine Zeitkonditionierung benötigt.

Hingegen können Koeffizienten in gleiche Größenordnungen gebracht werden, z.B. mit:

    `alpha = 2
    `beta = 3
    `gamma = 0.6

ergibt sich

    `dot x = 15 y - 10 x
    `dot y = 18.7 x - 0.4 xz - y
    `dot z = 10 x y - 2.67 z

Dieser Weg ist hier nur der Vollständigkeit halber aufgeführt; die eingangs erwähnt intuitive Skalierung benutzt:

    `alpha = 20
    `beta = 25
    `gamma = 50

und führt zu:

    `dot x = 12.5 y - 10 x
    `dot y = 22.4 x - 40 xz - y
    `dot z = 10 x y - 2.67 z

und mit einer Zeittransformation von 1/10:

    `dot x = 1.25 y - 1.0 x
    `dot y = 2.24 x - 4 xz - 0.1y
    `dot z = x y - 0.27 z

Erpobung ergibt allerdings leichte Bereichsüberschreitungen; eine Skalierung mit `alpha=beta=25` und einer Zeittransformation von 1/10 ergibt

    `dot x = 1.0 y - 1.0x
    `dot y = 2.8 x - 5.0 x z - 0.1y
    `dot z = 1.25 x y - 0.27 z

und weniger gravierende Bereichsüberschreitungen; mit `alpha=beta=30` und `gamma=60` ergibt sich:

    `dot x = 1.0 y - 1.0x
    `dot y = 2.8 x - 6.0 x z - 0.1y
    `dot z = 1.5 x y - 0.27 z

Translation

Um die Werte von `z` symmetrisch um Null zu erhalten, könne eine Translation versucht werden:

    `z rarr z + delta
    `dot z rarr dot z`

Da ergibt:

    `dot x = y - x
    `dot y = 2.8 x - 6.0 xz - 6.0 delta x - 0.1 y = (2.8 - 6.0 delta) x - 6.0xz - 0.1y
    `dot z = 1.5 x y - 0.267z - 0.267 delta

Mit `delta=0.5`

    `dot x = y - x
    `dot y = -0.2 x - 6.0 xz - 0.1y
    `dot z = 1.5 x y - 0.267z - 0.133

Ein Versuch ergibt jedoch, dass für kleine `delta` die `z`-Werte immer noch positiv sind und für `delta>0.2` die Chaos-Eigenschaft verschwindet, d.h. es nur noch Fixpunkte gibt.

Rückrechung

Angenommen, durch eine experimentielle Variation der Koeffizienten wird die Gleichung zu:

    `dot x = y - x
    `dot y = 3.57 x - 10 x z - 0.1 y
    `dot z = 10 x y - 0.374 z

Rücktransformation mit den uniformen Faktor 100 und einer Zeittransformation von 10 ergibt:

    `dot x = 10y - 10x
    `dot y = 35.7 x - x z - y
    `dot z = x y - 3.74 z

also

    `s = 10
    `r = 35.7
    `b = 3.75

Anhang

Schaltung ANRE

ANRE ist ein von der Univ. Paderborn entwickelter kleiner Schul-Analogrechner.

Schaltung RG14

RG14 ist eine von mir entwickelter Analogrechner mit Stromeingängen für die Summierer und Integratoren.

Graph (aus Wikipedia)

Literatur

Wikipedia:
https://de.wikipedia.org/wiki/Lorenz-Attraktor
Horowitz:
Frank Horowitz: Build a Lorenz Attractor.
http://frank.harvard.edu/~paulh/misc/lorenz.htm
Jung:
Andreas Jung: Lorenz-System und seltsame Attraktoren (1998). http://andreas.welcomes-you.com/research/talks/lorenz/
Anosov:
D.V. Anosov (originator): Lorenz attractor. Encyclopedia of Mathematics (2011).
http://www.encyclopediaofmath.org/index.php?title=Lorenz_attractor&oldid=12339 Original aus der Encyclopedia of Mathematics, ISBN 1402006098


1es hat sich offenbar hierfür der Terminus Vorkonditionierung als direkte Übersetzung des englischen Begriffs preconditioning eingebürgert, ohne zu berücksichtigen, dass der Begriff conditioning bereits im Sinne von Training besetzt war, was im Deutschen nicht der Fall ist. Bei einer Übersetzung ins Englische ist Konditionierung als stets mit preconditioning zu übersetzen.
Log In