Fachhochschule München, Fachbereich 03: Maschinenbau/Fahrzeugtechnik/Flugzeugtechnik Datei: Maple-Praktikum5.mws Datum: 30.5..2005 Erstellt von Prof. Dr. K. Warendorf unter Verwendung einer Vorlage von Dr. habil. D. Gröger Fachhochschule München, Fachbereich 03: Maschinenbau/Fahrzeugtechnik/Flugzeugtechnik -------------------------------------------------------------------------------------------------------------------Maple - Praktikum Teil 5: Differentialgleichungen In diesem Worksheet lernen Sie einige Fähigkeiten von MAPLE zur Lösung von gewöhnlichen Differentialgleichungen (DGL) kennen. Das Problem beim Lösen von DGL ähnelt dem bei der Integration von Funktionen: Es existieren zahlreiche mathematische Verfahren, die aber jeweils nur in ganz bestimmten Fällen zielführend sind. Zu den meisten möglichen (also mathematisch formulierbaren) DGL existieren überhaupt keine symbolischen Lösungen. Von dem MAPLE-Kommando dsolve zur symbolischen Lösung einer DGL gibt es daher eine numerische Variante, die durch die Option numeric aufgerufen werden kann. Im Folgenden betrachten wir zunächst die DGL erster Ordnung y' = F(x,y). Wir lernen, Richtungsfeld und Isoklinen zu zeichnen. Die Lösungen y der DGL werden exakt oder numerisch mit dem Runge-Kutta-Fehlberg-Verfahren ermittelt, und die Lösungskurven werden geplottet. Anschließend werden verschiedene Typen von DGL zweiter Ordnung exakt gelöst und ihre Lösungskurven gezeichnet. > restart; # Löschen aller Bindungen von Variablen Differentialgleichungen 1. Ordnung -------------------------------------------------------------------------------------------------------------------Differentialgleichung 1. Ordnung y' = F(x,y) -------------------------------------------------------------------------------------------------------------------Als einführendes Beispiel lösen wir die DGL y'(x) = k*y(x): > dgl:=diff(y(x),x)=k*y(x); > dsolve(dgl,y(x)); Wenn Sie die Schreibweise vermeiden wollen können Sie mit dem Befehl declare aus dem Paket PDEtools y(x)=y setzen und x als Ableitungsvariable definieren. > PDEtools[declare](y(x), prime=x); > dgl:=diff(y(x),x)=k*y(x); Die Integrationskonstante schreibt MAPLE als _C1. Sie kann durch einen Anfangswert festgelegt werden. Die Anfangsbedingung wird dem Befehl dsolve als weitere Gleichung übergeben: > dsolve({dgl,y(0)=5},y(x)); Häufig ist es sinnvoll die Steigungsfunktion F(x,y) vorab zu definieren (z.B. falls die gleiche Differentialgleichung mit verschiedenen rechten Seiten gelöst werden soll): > F := (x,y) -> x^2+y; > dgl := diff(y(x),x)=F(x,y(x)); # WICHTIG: y(x) und nicht nur y Das Richtungsfeld der DGL zeichnen wir mit dem MAPLE-Befehl dfieldplot aus dem Paket DEtools . Dabei müssen Bereiche für x und y festgelegt werden. > xdom := -5..5; # x-Bereich wählen > ydom := -5..5; # y-Bereich wählen > DEtools[dfieldplot](dgl,y(x),x=xdom,y=ydom); Verbindet man alle Punkte des Richtungsfeldes mit jeweils gleicher Steigung, so erhält man die Isoklinen der DGL. Sie sind also durch die Gleichung F'(x,y) = constant definiert. > Ik := solve(F(x,y)=k,y); # Isokline zur Steigung k > kdom := -3..3; # k-Bereich wählen > plot({seq(Ik,k=kdom)},x=xdom,y=ydom); Jetzt werden die allgemeine Lösung der DGL ermittelt und einige Lösungskurven gezeichnet. > dsolve(dgl,y(x)); # Allgemeine Lösung > subs(_C1=C,%); # Umbenennen der Integrationskonstante > fC := unapply(rhs(%),x); # Allgemeine Lösungsfunktion > Cdom := -1..1; # Bereich für Parameter C > plot([seq(fC(x),C=Cdom)],x=xdom,y=ydom,color=[black,green,blue]); # Zugehörige Lösungskurven Schließlich ermitteln wir die einer Anfangsbedingung Lösung der DGL. > x0 := 0; y0 := 1/2; > dsolve({dgl,y(x0)=y0},y(x)); genügende spezielle # Anfangswerte wählen # Spezielle Lösung Man kann die spezielle Lösung auch mittels der folgenden Befehlsgruppe aus der allgemeinen Lösung erhalten. > C0 := solve(fC(x0)=y0,C); Anfangsbedingung ermitteln # Parameterwert aus # fC ist die oben berechnete allgemeine Lösung > subs(C=C0,fC(x)); > f0 := unapply(%,x); # C=C0 in fC(x) einsetzen # Spezielle Lösungsfunktion Die graphische Darstellung der speziellen Lösung erfolgt nun wie bekannt: > plot(f0(x),x=xdom,y=ydom); Die in MAPLE vordefinierte numerische Variante von dsolve berechnet die Lösung der DGL nach dem Runge-Kutta-Fehlberg-Verfahren der Ordnung 4/5 (abgekürzt: rkf45 ) und gibt sie als Prozedur (Funktion) aus (y(x0)=y0 ist die Anfangsbedingung): > > > > f0 := dsolve({dgl,y(x0)=y0},numeric); f0(0); f0(1); f0(2); # Einige Werte der numerischen Lösung seq(f0(i*0.1),i=0..20); # Liste von Punkten der Lösungskurve array([%]); # schönere Darstellung Mittels odeplot aus dem Paket plots kann diese Lösung geplottet werden. > plots[odeplot](f0,0..2); Differentialgleichungen 2. Ordnung --------------------------------------------------------------------------------------------------------------------Differentialgleichung 2. Ordnung y'' = F(x,y,y') --------------------------------------------------------------------------------------------------------------------Wir betrachten jetzt ausgewählte Typen der DGL y'' = F(x,y,v), wobei v = y' gesetzt ist. Und zwar ist diese DGL oft dann exakt lösbar, wenn in der rechten Seite (also in F(x,y,v)) entweder x oder y nicht vorkommt. Hierzu einige Beispiele: > dgl := diff(y(x),x$2) = 2*exp(y(x)); # Direkte Definition der DGL > dsolve(dgl,y(x)); # Allgemeine Lösung > F := unapply(v/(x*ln(x)),x,y,v); # Definiton der DGL mit Hilfe der Funktion # F(x,y,v) mit v=y' > dgl := diff(y(x),x$2)=F(x,y(x),diff(y(x),x)); # DGL definieren > dsolve(dgl,y(x)); # Allgemeine Lösung Spezielle Lösungen erhält man durch zusätzliche Bedingungen, die wieder zusammen mit der DGL in geschwungene Klammern gesetzt werden. > x0 := 0; y0 := 1; x1 := 1; y1 := 0; # Randwerte wählen > dsolve({dgl,y(x0)=y0,y(x1)=y1},y(x)); # Spezielle Lösung > f0 := unapply(rhs(%),x); # Lösungsfunktion definieren # rhs() : rechte Seite von der Lösung > plot(f0(x),x=x0..x1); # Graph plotten Wenn Anfangs- oder Randbedingungen für Ableitungen angegeben werden sollen, muss die Schreibweise verwendet werden. Höhere Ableitungen notiert man in der Form = > > > > > etc. x0 := 2; y0 := 1; v0 := 1; dgl; # Anfangswerte wählen dsolve({dgl,y(x0)=y0,D(y)(x0)=v0},y(x)); f0 := unapply(rhs(%),x); # Lösungsfunktion definieren x1 := 5; # Obere Begrenzung des x-Bereiches plot(f0(x),x=x0..x1); # Graph plotten ---------------------------------------------------------------------------------------------------------------------Lineare DGL '' + '+ = mit konstanten Koeffizienten ---------------------------------------------------------------------------------------------------------------------Besonders einfach zu lösen sind lineare DGL mit konstanten Koeffizienten, die wir abschließend behandeln. Auch hier beschränken wir uns auf die Ordnung 2. Wir beginnen mit der homogenen DGL. > dgl := diff(y(x),x$2)+a[1]*diff(y(x),x)+a[0]*y(x)=0; > dsolve(dgl,y(x)); Je nach dem Verhalten der Diskriminante folgenden Fälle: # allgemeine Lösung := unterscheidet man die d << 0 : Schwingungsfall > a[1] := 1; a[0] := 10; # Koeffizienten wählen > dgl; > dsolve(dgl,y(x)); # Allgemeine Lösung > x0 := 0; y0 := 0; v0 := 1; # Anfangswerte wählen > dsolve({dgl,y(x0)=y0,D(y)(x0)=v0},y(x)); > f0 := unapply(rhs(%),x); # Spezielle Lösung # Lösungsfunktion definieren > plot(f0(x),x=0..10,title=`gedämpfte Schwingung`); d >> 0 : Kriechfall > a[1] := 10; a[0] := 5; > dgl; # Koeffizienten wählen > > > > > dsolve(dgl,y(x)); # Allgemeine Lösung x0 := 0; y0 := 0; v0 := 1; # Anfangswerte wählen dsolve({dgl,y(x0)=y0,D(y)(x0)=v0},y(x)); # Spezielle Lösung f0 := unapply(rhs(%),x); # Lösungsfunktion definieren plot(f0(x),x=0..10,title=`Kriechfall`); d ~ 0 : Aperiodischer Grenzfall > > > > > > > a[1] := 1; a[0] := 0.6; # Koeffizienten wählen dgl; dsolve(dgl,y(x)); # Allgemeine Lösung x0 := 0; y0 := 0; v0 := 1; # Anfangswerte wählen dsolve({dgl,y(x0)=y0,D(y)(x0)=v0},y(x)); # Spezielle Lösung f0 := unapply(rhs(%),x); # Lösungsfunktion definieren plot(f0(x),x=0..10,title=`Aperiodischer Grenzfall`); Bei der inhomogenen DGL tritt die Störfunktion auf. > restart; > PDEtools[declare](y(x), prime=x); > dgl := diff(y(x),x$2)+a[1]*diff(y(x),x)+a[0]*y(x)=b(x); Die allgemeine Lösung ist von der Gestalt partikuläre Lösung ist und , wobei eine die allgemeine Lösung der zugehörigen homogenen DGL bezeichnet. Als Beispiel "stören" wir die oben in dem Fall d << 0 betrachtete Schwingung: > > > > > > > > a[1] := 1; a[0] := 10; # Koeffizienten wählen b := x-> sin(x); # Störfunktion definieren dgl; dsolve(dgl,y(x)); # Allgemeine Lösung x0 := 0; y0 := 0; v0 := 1; # Anfangswerte wählen dsolve({dgl,y(x0)=y0,D(y)(x0)=v0},y(x)); # Spezielle Lösung f0 := unapply(rhs(%),x); # Lösungsfunktion definieren plot(f0(x),x=0..20); Zur Illustration der "Resonanzkatastrophe" betrachten wir noch das folgende Beispiel. > > > > a[1] := 0; a[0] := omega^2; b := x -> A*cos(omega*x); dgl; dsolve(dgl,y(x)); Wie man sieht, enthält die partikuläre Lösung den Schwingungsterm , dessen Amplitude linear mit wächst. Zwecks zeichnerischer Darstellung des Graphen müssen die Parameter festgelegt werden: > > > > > > omega := 1; A := 1; dgl; x0 := 0; y0 := 0; v0 := 1; dsolve({dgl,y(x0)=y0,D(y)(x0)=v0},y(x)); f0 := unapply(rhs(%),x); plot(f0(x),x=0..20,title=`Resonanzkatastrophe`); Aufgaben --------------------------------------------------------------------------------------------------------------------Übungsaufgaben --------------------------------------------------------------------------------------------------------------------- 1. Gegeben sei die Differentialgleichung 1. Ordnung '= . a) Plotten Sie das zugehörige Richtungsfeld im 1. Quadranten und die Isoklinen für c=-2, c=0, c=0.5 in ein Diagramm. Beschriften Sie die Isoklinen. b) Plotten Sie das zugehörige Richtungsfeld im 1. Quadranten und die Lösung, die durch den Punkt P(0.8;0.6) geht. 2. Lösen Sie die DGL 1. Ordnung der Anfangs- ' = zunächst allgemein und dann mit bedingung . Wieviele Lösungen des Anfangswertproblems gibt es ? Wählen Sie eine der Lösungen aus und kontrollieren Sie ihre Richtigkeit durch Einsetzen in die DGL mittels subs und anschließendes Vereinfachen mittels simplify . 3. Lösen Sie die folgende DGL 2. Ordnung unter den Anfangsbedingungen x0 := 0; y0 := 0; x1 := 3; y1 := 2; 4. Berechnen Sie die allgemeinen Lösungen der folgenden linearen DGL 2. Ordnung. Wählen Sie bei a) die Anfangsbedingungen y(1)=1 und y'(1)=1 und plotten Sie den Graphen der zugehörigen speziellen Lösung. a) '' - 6 '+9 b) '' + = c) '' + = d) '' + = = 5. Lösen Sie die lineare DGL 4.Ordnung '''' + '' = zunächst standardmäßig mit dem Befehl dsolve und danach mit der zusätzlichen Option output=basis . Vergleichen Sie die Ergebnisse und beschreiben Sie allgemein die Wirkung dieser Variante von dsolve.