Und wieder liegt der Schwerpunkt der Aufgabenstellung bei der offenen Fragestellung, die unsere Schüler von morgen dazu anregen soll, über mehrere Lösungswege nachzudenken. Hier wird ein Lösungsweg skizziert.
Aufgabe
Die Mannschaft des Raumschiffs Waterloo-Enterprise soll der Raumstation MIR einen neuen Computer mit dem neuesten Computeralgebrasystem Maple X Release 2020 bringen. Das Andocken soll vorher von der Mannschaft der Waterloo-Enterprise am Computer durchgespielt werden. Man geht dabei von folgendem Szenario aus: Die MIR ist manövrierunfähig. Die Waterloo-Enterprise fliegt zunächst mit gleicher Geschwindigkeit wie die MIR und soll dann in einer bestimmten Zeit die MIR einholen und dort festmachen. Bei der ersten Simulation des Manövers geht man davon aus, daß die Triebwerke in der Beschleunigungs- und Verzögerungsphase mit konstantem Schub arbeiten.
Heuristik
Der Chefprogrammierer CP der Waterloo-Enterprise-Crew verschafft sich einen Überblick, indem er das Manöver in drei Phasen unterteilt:
1. Beschleunigungsphase mit der konstanten Beschleunigung .
2. Gleichförmige Bewegung in Richtung MIR.
3. Verzögerungsphase mit der konstanten Verzögerung .
> restart:
> a:=t->piecewise(t>0 and t<t1,a1,t>=t1 and t<t2,0,t>t2,a3);
> a(t);
Die Beschleunigung ist nun stückweise für die einzelnen Abschnitte definiert, etwa für die Zeiten
> (t1,t2):=(2,4);
Um die Ortsfunktion der Waterloo-Enterprise zu erhalten, versetzt sich der Chefprogrammierer in ein Koordinatensystem, das sich mit der MIR bewegt, und berechnet die Relativgeschwindigkeit zur MIR:
> v:=unapply(int(a(t),t),t);
> v(t);
Zur Sicherheit ein Test mit Zahlen:
> v(7);
> a1:=2;a3:=-3;
> v(t);
Und das Beschleunigungs- und Geschwindigleitsdiagramm:
> plot({a(t),v(t)},t=0..8,thickness=2);
Es fehlt noch die Ortsfunktion. Um flexibel zu bleiben, werden die Beschleunigungen wieder freigegeben:
> a1:='a1':a3:='a3':
> s:=unapply(int(v(t),t),t);
> s(t);
Nun können die Funktionen zu verschiedenen Werten der Parameter untersucht werden:
> a1:=2:a3:=-3:
> plot({a(t),v(t),s(t)},t=0..8,thickness=2);
Wenn die MIR zum vorgeschriebenen Zeitpunkt erreicht werden soll, so muß das Maximum der Ortskurve die richtigen Koordinaten (im s-t-Diagramm) haben, denn die Waterloo-Enterprise sollte ja mit der Geschwindigkeit 0 andocken. Der Chefprogrammierer weiß, daß er die Beschleunigungen innerhalb vorgegebener Grenzen variieren kann. Außerdem kann die Brenndauer der Triebwerke verändert werden. Wie sich letzteres auf den Treibstoffverbrauch auswirkt, will er in einem zweiten Durchgang untersuchen. Zunächst muß geklärt werden, wie es durch Änderung der Parameter überhaupt möglich ist, die MIR ohne Kollision zu erreichen.
Systematische Untersuchung
Man beginnt wieder mit dem Aufstellen der erforderlichen Funktionen
> restart:
> a:=t->piecewise(t>0 and t<t1,a1,t>=t1 and t<t1+dt2,0,t>t1+dt2,a3):
> a(t);
> v:=unapply(int(a(tau),tau=0..t),t):
> v(t);
>
> s:=unapply(int(v(tt),tt=0..t),t):
> s(t);
Ein Testplot, ob mit den neu aufgestellten Funktionen auch die Zeiten variabel eingegeben werden können:
> t1:=2:dt2:=3:a1:=2:a3:=-3:
> plot({a(t),v(t),s(t)},t=-1..8,thickness=2);
Wie kann nun das Problem systematisch gelöst werden? Zunächst müssen die im Moment noch willkürlich gesetzten Parameter wieder freigegeben werden:
> (t1,dt2,a1,a3):=('t1','dt2','a1','a3'):
Und dann benötigt man ein Gleichungssystem, das die Bewegung der Waterloo-Enterprise beschreibt, und das alle Parameter und Randbedingungen enthält.
Für die in den drei Phasen zurückgelegten Strecken liest der Chefprogrammierer aus obigen Gleichungen folgendes ab:
> Strecken:=s1=a1*t1^2/2,s2=v2*dt2,s3=v2*dt3+a3*dt3^2/2;
Und für die Geschwindigkeiten hat er sich diese Gleichungen ausgedacht:
> Geschwindigkeiten:=v2=a1*t1,v2+a3*dt3=0;
Fehlen noch die Randbedingungen, daß nämlich die gesamte Strecke S ist und die gesamte Dauer des Manövers T:
> Randbedingungen:=S=s1+s2+s3,T=t1+dt2+dt3;
Das liefert ein System von sieben Gleichungen:
> sys:={Strecken,Geschwindigkeiten,Randbedingungen};
Dieses System läßt sich zum Beispiel so lösen, daß die Beschleunigungen und die Dauer der ersten Beschleunigungsphase durch die Randbedingungen und die beiden anderen Zeitabschnitte bestimmt sind:
> sol:=solve(sys,{a1,a3,v2,s1,s2,s3,t1});
> assign(sol);
> 'a1'=a1;'a3'=a3;'t1'=t1;
Der Chefprogrammierer möchte nämlich zum Zwecke einer möglichst risikoarmen Ankopplung die Dauer der Verzögerungsphase als freien Parameter behalten.
Er überprüft zunächst seine Befehle an einem Beispiel:
> S:=10:T:=8:dt2:=2:dt3:=4:
> plot({a(t),v(t),s(t)},t=-1..T+0.2,thickness=2);
Wie verlangt, legt die Waterloo-Enterprise nach 8 Zeiteinheiten an der 10 Längeneinheiten entfernten MIR mit der Geschwindigkeit 0 an.
Ist dies das einzig mögliche Manöver?
> dt3:='dt3':
> spl:=plot({seq(s(t),dt3=1..5)},t=-1..T+0.2,thickness=2):spl;
Vielleicht läßt sich das etwas plastischer darstellen?
> plot3d(s(t),t=-1..T+1,dt3=1..5,grid=[20,5],orientation=[-120,50],shading=ZHUE,axes=framed);
Nachdem der Chefprogrammierer diese Darstellung von allen Seiten betrachtet hat, entschließt er sich, die kritische Phase der Verzögerung nicht zu kurz zu wählen, und empfiehlt dem Piloten dt3 = 4. Es bleibt nun noch die Option dt2, also die Dauer der Reise mit konstanter Geschwindigkeit:
> dt2:='dt2':dt3:=4:
> plot3d(s(t),t=-1..T+1,dt2=1..3.9,grid=[20,5],orientation=[-120,50],shading=ZHUE,axes=framed);
Auf den ersten Blick scheint es nicht so sehr darauf anzukommen, wie man dt2 wählt. Doch dann entdeckt der CP einen Knick in den s(t)-Kurven für große Werte von dt2. Das deutet auf hohe Beschleunigungen hin! Und weil CP auch an die Mannschaft denkt, untersucht er das näher:
> dt3:='dt3':
> a1;
Der Term läßt Böses ahnen, denn im Nenner steht eine Differenz.
> plot3d(a1,dt2=0..3,dt3=1..4,axes=framed,style=patchcontour,orientation=[-120,60],shading=ZHUE);
Aber mit dt2 = 2 ist man wohl noch weit genug vom Pol entfernt und der Bordmediziner sagt, daß eine Beschleunigung von einer halben Beschleunigungseinheit ohne weiteres zumutbar ist.
Bevor sich CP dem Treibstoffverbrauch widmet, untersucht er noch die Geschwindigkeitskurven für dt2 = 2 zu verschiedenen Werten von dt3:
> dt2:=2:dt3:='dt3':
> vpl:=plot({seq(v(t),dt3=1..5)},t=-1..T+0.2,thickness=2):vpl;
Nun ja - das sind gescherte Trapeze. Aber hat das etwas zu bedeuten? Und was passiert, wenn man dt2 variiert?
> dt3:=4:dt2:='dt2':
> vpl:=plot({seq(v(t),dt2=1..)},t=-1..T+0.2,thickness=2):vpl;
Dann ändert sich die Höhe der Trapeze, aber man kann wieder vermuten, daß ihr Flächeninhalt gleich bleibt. Klar - sagt sich CP, das muß so sein (denn er hat in Physik aufgepaßt). Und er denkt bei sich: 'Eigentlich hätte ich auch mit einem Stück Papier und Bleistift anfangen können, wenn ich gleich die Idee gehabt hätte, mich auf die Geschwindigkeitsfunktion zu konzentrieren. Wie sagte doch mein alter Physiklehrer?' "Wenn man die ersten Integrale hat, kennt man die Bewegung!"
Aber CP hat jetzt keine Zeit, von den gemütlichen Zeiten zu träumen, in denen man noch ohne Computer auskam. Der Commander wartet und er sollte sich noch um den Treibstoffverbrauch kümmern.
Also setzt er an: Der Treibstoffverbrauch sollte dem Produkt aus Beschleunigung und Brenndauer proportional sein.
> dt2:='dt2':dt3:='dt3':S:='S':T:='T':
> W:=a1*t1+a3*dt3;
Läßt sich das vereinfachen?
> simplify(W);
Ziemlich stark! So stark, daß CP einen Fehler vermutet. Natürlich! Der Verbrauch ist immer positiv, auch wenn die Beschleunigung negativ ist:
> W:=simplify(a1*t1-a3*dt3);
Zuerst ist CP von der Antwort seines PC überrascht: Der Verbrauch hängt nicht von der Dauer der einzelnen Beschleunigungsphasen ab, sondern von der Pause. Außerdem ist er in beiden Beschleunigungsphasen gleich groß. Doch dann schaut sich CP noch einmal die Geschwindigkeitsdiagramme an und sagt sich: 'Klar - das muß so sein'. Der theoretisch minimale Verbrauch wird dann erreicht, wenn die Beschleunigungsphasen unendlich kurz sind:
> limit(a1*t1,dt2=T);
> limit(-a3*dt3,dt2=T);
Oder wenn sich Waterloo-Enterprise mit der konstanten Geschwindigkeit S/T zur MIR bewegt. Leider bekommen wir dann sehr hohe Beschleunigungen
> limit(a3,dt3=0,right);
und die können wir der Mannschaft nicht zumuten.
Animation
Natürlich möchte CP nicht ohne eine Animation der Simulation vor seinen Commander treten:
> dt3:=4:dt2:=2:S:=10:T:=8:
> with(geometry):with(plots):
> circle(k1,[point(WE,s(t),0),1/2]):
> circle(k2,[point(MIR,S+3/2,0),1]):
> plots[display]([seq(draw({k1(color=blue,filled=true),k2(color=red,filled=true)},axes=normal),t=seq(T/40*i,i=0..40))],scaling=constrained,insequence=true);
Für die nächste Simulation muß sich CP erst noch genauere Informationen über Triebwerke beschaffen, die eine variable Beschleunigung erlauben - natürlich aus dem Internet.
komma@oe.uni-tuebingen.de