[Maple OLE 2.0 Object]

Überblick

Oft ist es erwünscht, sich einen qualitativen Überblick über alle möglichen Lösungen einer Differentialgleichung verschaffen. Dies gelingt zum einen durch Schaubilder, die möglichst viele Lösungskurven bei verschiedenen Anfangsparametern darstellen, zum anderen durch sogenannte Richtungsfelder.

Bei expliziten, gewöhnlichen Differentialgleichungen erster Ordnung diff(y(x),x) = f(x,y(x)) kann man die rechte Seite der Gleichung geometrisch als Tangentensteigung im Punkt [x, y(x)] auffassen. Man kann dann dem Wertepaar x, y(x) den Wert f(x,y(x)) zuordnen und diese Zuordnung in einem Schaubild darstellen. Man visualisiert dazu die Steigung durch kurze Linienelemente im zugehörigen Punkt. Die Kurve einer Lösungsfunktion muss nun auf dieses Richtungsfeld "passen".

Inhaltsverzeichnis

-----------------------

Lösung einer Differentialgleichung bei verschiedenen Anfangsbedingungen

Beispiel Tropfinfusion

Einem Patienten soll über eine Tropfinfusion ein bis dahin im Körper nicht vorhandenes Medikament verabreicht werden. Dabei gelangt pro Minute eine gleichbleibende Menge von x mg ins Blut (Das kann an der Infusionsflasche eingestellt werden.). Über die Niere wird ein Teil des Medikaments wieder ausgeschieden. Die Ausscheidungsrate A beträgt 5% der jeweils im Blut gerade vorhandenen Menge u(t). Also ist A= -5/100*u(t).
Die in der Zeit Dt zugeführte Menge beträgt x*Dt. Die langfristig im Blut enthaltene Menge soll 100mg nicht übersteigen.
Wie groß muss x gewählt werden?

Exkurs: Herleitung der Differentialgleichung

Die Bestandsgröße u(t) gibt die zur Zeit t im Blut vorhandene Menge des Medikaments in mg an.
Im Zeitraum zwischen t und t+Dt ändert sich der Bestand um die Größe:

> u(t+Dt)-u(t)=x*Dt-5/100*u(t)*Dt;
simplify(%/Dt);

u(t+Dt)-u(t) = x*Dt-1/20*u(t)*Dt

(u(t+Dt)-u(t))/Dt = x-1/20*u(t)

Man erhält im Grenzfall Dt->0 folgende Differentialgleichung:

> DGL:=limit(lhs(%),Dt=0)=limit(rhs(%),Dt=0);

DGL := D(u)(t) = x-1/20*u(t)

Beachten Sie bitte, dass nicht x sondern t die Variable ist. Maple löst nun die DGL mit der Anfangsbedingung, dass zur Zeit t=0 noch kein Medikament im Körper war, d.h. u(0)=0:

> sol:=dsolve({DGL,u(0)=0},u(t));

sol := u(t) = 20*x-20*exp(-1/20*t)*x

Man erhält eine Lösungsfunktion u(t). Der Exponentialfaktor zeigt einen Abnahmeprozess (negativer Exponent !).

Allerdings muss man Maple mitteilen, dass u(t) eine Funktion ist.

> u:=unapply(rhs(sol),t);

u := proc (t) options operator, arrow; 20*x-20*exp(...

Die Medikamentenmenge soll langfristig 100mg nicht übersteigen. Man muss also den Grenzwert für t -> infinity bilden. Falls dieser existiert, wird Maple ihn anzeigen:

> Limit(u(t),t=infinity)=limit(u(t),t=infinity);

Limit(20*x-20*exp(-1/20*t)*x,t = infinity) = 20*x

Die rechte Seite der Gleichung gibt den Grenzwert der Funktion u(t) an. Da dieser 100 betragen soll, gilt:

> 100=20*x;
x:=solve(%,x);

100 = 20*x

x := 5

Bei einer konstanten Zufuhr von 5mg Medikament, wird die Medikamentenmenge insgesamt 100mg nicht überschreiten.

Man kann nun die Lösung im Schaubild betrachten.

> plot({100,u(t)},t=0..140,0..120,color=[red,blue]);

[Maple Plot]

Nach knapp 100 Minuten ist der Sättigungswert etwa erreicht.

Durch Umformen kann die obige Differentialgleichung auch auf die Form D(u)(t) = k*(G-f(t)) gebracht werden. Dies ist die Form der Differentialgleichung des beschränkten Wachstums. G gibt die Sättigungsgrenze an. k ist die Wachstumskonstante. Man errechnet leicht, dass in diesem Fall k=1/20 und G=100 sein muss.

>

Die obige Aufgabe führt auf die folgende Differentialgleichung:

> y:='y':x:='x':
DGL:=D(y)(t)=5-1/20*y(t);

DGL := D(y)(t) = 5-1/20*y(t)

Mit dsolve lässt sich diese Differentialgleichung allgemein lösen. (Man muss an dieser Stelle Maple mitteilen, dass die Lösung eine Funktion von t ist. Dies erreicht man durch unapply ).

> lsg:=dsolve(DGL,y(t)):

> y:=unapply(rhs(lsg),t);

y := proc (t) options operator, arrow; 100+exp(-1/2...

Die Konstante _C1 errechnet man aus der Anfangsbedingung, z.B für y(0)=0 ...

> c1:=solve(y(0)=0,_C1);

c1 := -100

und für y(0)=20:

> c2:=solve(y(0)=20,_C1);

c2 := -80

Jetzt kann man die Lösung für beide Anfangsbedingungen in einem Schaubild darstellen:

> plots[display](plot([subs(_C1=c1,y(t)),subs(_C1=c2,y(t))],t=0..120,y=0..110));

[Maple Plot]

Die grüne Kurve bedeutet im vorliegenden Fall, dass der Patient zu Beginn der Tropfinfusion schon (noch?) 20 mg Wirkstoff im Blut hatte.

Natürlich kann man die Anfangsbedingungen weiter variieren, um sich einen Überblick über die verschiedenen Lösungen der Differentialgleichungen zu verschaffen.

> c_Werte:=[-100,-80,-60,-40,-20,0,20]:
Bildsequenz_1:=seq(plot(y(t),t=0..120),_C1=c_Werte):
plots[display](Bildsequenz_1);

[Maple Plot]

Die oberste Kurve verwundert zunächst etwas. Obwohl der Patient zu Beginn der Infusion schon eine "Überdosis" im Blut hatte, kann man die Zufuhr trotzdem bei 5 mg pro Minute belassen. Langfristig wird wieder der Sättigungswert erreicht.

Aber noch weitere Fälle sind denkbar. Dem Befehl dsolve kann man die Anfangsbedingung unmittelbar übergeben.

> y:='y':
lsg1:=dsolve({DGL,y(20)=0},y(t)):

> r:=unapply(rhs(lsg1),t):

> plot(r(t),t=0..120,0..120,color=blue);

[Maple Plot]

Mit der Prozedur afb_seq können die Kurven für verschiedene Anfangsbedingungen in ein Schaubild gezeichnet werden.

> liste:=[[0,0], [20,0],[40,0], [60,0], [0,100], [0,120], [20,120],[40,120],[60,120]]:

> afb_seq(DGL,y(t),liste,0..120,view=[0..120,0..140]);

[Maple Plot]

>

zurück zum Anfang

Beispiel: Stabilität von Differentialgleichungen

Wie hängt die Lösung einer Differentialgleichung von der Anfangsbedingung ab? Führen kleine Veränderungen im Anfangswert y(0) zu großen oder kleinen Veränderungen der Lösung?
Fragen wie diese, zielen auf eine Stabilitätsbetrachtung der Differentialgleichung.

> y:='y':x:='x':
DGL1:=D(y)(x)=exp(-x)-2*y(x);

DGL1 := D(y)(x) = exp(-x)-2*y(x)

Die allgemeine Lösung für das Anfangswertproblem y(0)=k lautet:

> sol:=dsolve({DGL1,y(0)=k},y(x));

sol := y(x) = (exp(x)-1+k)*exp(-2*x)

Offensichtlich hängt die Lösung für ein festes x kontinuierlich von k ab. Man kann aber noch mehr sagen. Wenn y[1](x) und y[2](x) die Lösungsfunktionen zu den Anfangswertproblemen y(0) = k[1] bzw y(0) = k[2] sind, dann beträgt der Betrag der Differenz beider Funktionen:

abs(y[1](x)-y[2](x)) = abs(k[1]-k[2])*exp(-2*x)

Für 0 < x sieht man, dass die Differenz der Funktionswerte betragsmäßig mit steigendem x abnimmt.

Für x < 0 ist die Situation anders. Je kleiner x hier wird, desto stärker macht sich der Exponentialfaktor gegenüber der Differenz der Konstanten bemerkbar. Schon für x = -7 und abs(k[1]-k[2]) = 1/1000 unterscheiden sich die Funktionswerte um ein Vielfaches:

abs(y[1](-7)-y[2](-7)) = 10^(-3)*exp(14) , was etwa 1203 ergibt.

Kleine Unterschiede in der Anfangsbedingung führen bei negative x-Werten zu großen Unterschieden in den Funktionswerten: Man sagt die Lösung ist instabil für negative x-Werte.
Dies wird im folgenden Schaubild deutlich.

> Anfangsbedingungen:=[[0, 0.96], [0, 0.97], [0, 1], [0, 1.03]]:

> afb_seq(DGL1,y(x),Anfangsbedingungen,-4..3,color=[red,blue,green,magenta],
view=[-4..3,0..20]);

[Maple Plot]

>

>

zurück zum Anfang

Richtungsfelder

Schon bei dem Beispiel mit der Tropfinfusion ist deutlich geworden, dass man sich einen Überblick über mögliche Lösungen einer gewöhnlichen Differentialgleichung verschaffen kann, wenn man die Kurven zu verschiedenen Anfangsbedingungen in ein Schaubild zeichnen lässt. Man sieht sofort Bereiche, in denen der Kurvenverlauf ein ähnlicher ist oder sogar ganz von "benachbarten" Kurven abweicht.

Bei expliziten, gewöhnlichen Differentialgleichungen erster Ordnung diff(y(x),x) = f(x,y(x)) kann man zudem die rechte Seite der Gleichung als Tangentensteigung im Punkt [x, y(x)] auffassen. Wenn man also dem Wertepaar x, y(x) den Wert f(x,y(x)) zuordnet, so kann man diese Zuordnung in einem Schaubild durch die Zuordnung Punkt -> m darstellen. Hierbei wird m als Steigung der Tangente in diesem Punkt aufgefasst.
Visualisiert man die Steigung durch kurze Linienelemente im zugehörigen Punkt, so erhält man das sogenannte Richtungsfeld der Differentialgleichung. Die Kurve einer Lösungsfunktion muss nun auf dieses Richtungsfeld passen.
Die Prozedur
richtfeld ordnet jedem Wertepaar die Steigung an dieser Stelle zu und stellt das Richtungsfeld graphisch dar.

> y:='y':x:='x':
DGL:=D(y)(x)=5-0.05*y(x);
liste:=[[10,80],[20,80],[30,80],[10,100],[20,100],[30,100],[10,120],[20,120],[30,120]]:

> richtfeld(DGL,y(x),liste,0..40,0..130);

DGL := D(y)(x) = 5-.5e-1*y(x)

[Maple Plot]

Einfacher ist es, die Liste mit dem seq-Befehl zu erzeugen:

> liste:=[seq(seq([j*10,i*10],j=1..9),i=1..12)]:

> richtfeld(DGL,y(x),liste,0..100,0..130);

[Maple Plot]

MIt dfieldplot aus dem Paket DEtools stellt Maple ebenfalls einen Befehl zur Verfügung, um ein solches Richtungsfeld zu erzeugen

> with(DEtools,dfieldplot):

> dfieldplot(DGL,y(x),x=0..100,y=0..140);

[Maple Plot]

> DGL1:=D(y)(x)=exp(-x)-2*y(x);

> dfieldplot(DGL1,y(x),x=-4..3,y=-1..6,color=sienna,arrows=LINE);

DGL1 := D(y)(x) = exp(-x)-2*y(x)

[Maple Plot]

Die Bedeutung einzelner Faktoren für mögliche Lösungsfunktionen soll im Folgenden abgeschätzt werden. Dazu wird zunächst eine Schar von Differentialgleichungen erzeugt, deren einzelne Richtungsfelder in einer Bilderliste gespeichert werden. Mit Hilfe des display -Befehls lässt sich die Bilderliste Bild für Bild anzeigen. Man erkennt nun deutlich diejenigen Bereiche, in denen die Lösungsfunktion kaum von dem betrachteten Faktor abhängig ist.

> with(DEtools,dfieldplot):
y:='y':x:='x':k:='k':
DGL_schar:=D(y)(x)=exp(-k/10*x)-2*y(x);

DGL_schar := D(y)(x) = exp(-1/10*k*x)-2*y(x)

> Bilderliste:=seq(dfieldplot(DGL_schar,y(x),x=-4..3,y=-1..6,color=blue,arrows=LINE),k=1..40):

> plots[display](Bilderliste,insequence=true);

A nimation !

>

[Maple Plot]

zurück zum Anfang

>

Richtungsfelder mit Lösungskurven

Dass die Lösungskurven auf das Richtungsfeld wirklich "passen", soll im folgenden demonstriert werden.

> n:='n':t:='t':
DGL2:=D(n)(t)=2*(n(t)/1200)*(1200-n(t));

DGL2 := D(n)(t) = 1/600*n(t)*(1200-n(t))

Zunächst werden das Richtungsfeld und die Lösungskurven für bestimmte Anfangsbedingungen berechnet. (Man beachte, dass Maple ohne die Option discont=true standardmäßig senkrechte Asymptoten an den Polstellen einzeichnet)

> liste:=[seq(seq([j*0.5,i*200],j=-4..8),i=-3..10)]:

> feld:=richtfeld(DGL2,n(t),liste,-2..4,-600..2000):

> lsg_kurven:=afb_seq(DGL2,n(t),[[0,50],[0,-10]],-2..4,color=[green,red],
thickness=3,discont=true):

Jetzt können beide Bilder in einem Koordinatensystem dargestellt werden:

> plots[display]([feld,lsg_kurven],view=[-2.5..4.5,-600..2000]);

[Maple Plot]

Maple stellt hierzu die Befehle phaseportrait und DEplot zu Verfügung. (Informationen zur Syntax entenhmen Sie bitte der entsprechenden Hilfeseite.)

> with(DEtools,phaseportrait):

> phaseportrait(DGL2,n(t),t=-2..4,[[n(0)=50],[n(0)=-10]],n=-600..2000,linecolor=[red,green]);

[Maple Plot]

> with(DEtools,DEplot):

> DEplot(DGL2,n(t),t=-2..4,[[n(0)=50],[n(0)=-10]],n=-600..2000,linecolor=[red,green]);

[Maple Plot]

Allerdings fehlt hier jeweils der obere Ast der einen Kurve. Ganz offensichtlich ein Fehler!

>

zurück zum Anfang

Literatur

H.J. Brochhagen
Differentialgleichungen in der Schulmathematik
in: Der Mathematikunterricht , Jg 41, Heft 2 März 1995

Coombes, Hunt, Lipsman, Osborn, Stuck
Differential Equations with Maple
John Wiley & Sons , New York 1996

Enz
Differentialgleichungen
Landesinstitut für Erziehung und Unterricht, Stuttgart 1995