# Kapitel 22: Differentiation # =================== # a) Differentiation mittels "diff" und "D" # ------------------------------------------------- # Maple hat zwei unterschiedliche Befehle zur Berechnung der # ersten Ableitung: # # "diff" ist f"ur "expressions" gedacht, also f"ur Funktionen # (Formeln, Ausdr"ucke), die durch Funktionswerte wie "f(x), sin(x), # x^n+x^m" beschrieben werden, # "D" f"ur Funktionen, die durch den Funktionsnamen # oder ihre Abbildungsvorschrift aufgerufen werden, also etwa "sin", # "log", "exp", "tanh", "arctan", "arctanh", "x --> x^5-8x^2+1". # # Entsprechend ist auch der output verschieden. # # i) Anwendung von "diff". # ---------------------------------- # Der Befehl "diff" verlangt als erstes Argument einen Ausdruck, # der eine Variable enth"alt, und als zweites die Variable, nach der # differenziert werden soll. > Diff(x^5,x)=diff(x^5,x);Diff(sin(x),x)=diff(sin(x),x); Diff(tan(y),y)= > diff(tan(y),y);Diff(exp(z^2),z)=diff(exp(z^2),z);Diff(1/sin(1/x),x)= > diff(1/sin(1/x),x);Diff(1/sin(1/x),y)=diff(1/sin(1/x),y); Diff(1/x,x)= > diff(1/x,x);Diff(log(x),x)=diff(log(x),x); # In dieser Form berechnet "diff" die erste (gew"ohnliche) # Ableitung. Wie "ublich bleibt es dem Benutzer # "uberlassen, den G"ultigkeitsbereich der Ergebnisse zu # bestimmen. # Die Schreibweise mit dem "del"--Zeichen ist # eigentlich nicht "ublich: Sie ist f"ur # partielle Ableitungen (von Funktionen von mehreren # Ver"anderlichen) vorbehalten. # Wenn die Variablenangabe an der zweiten Stelle fehlt, gibt # es eine Fehlermeldung: > diff(sin(x)); Error, wrong number (or type) of parameters in function diff # ebenso, wenn sie auch an der ersten Stelle fehlt: > diff(sin); Error, wrong number (or type) of parameters in function diff # Fehlt sie nur an der ersten Stelle, so interpretiert Maple den zu # differenzierenden Ausdruck als eine Konstante: > diff(sin,x); # Die folgenden Fehlermeldungen entstehen, weil die Syntax zum Befehl # "D" verwendet wurde: > diff(x->x^5,x); Error, non-algebraic expressions cannot be differentiated > diff(x->x^5); Error, wrong number (or type) of parameters in function diff # ========================================== # ii) Anwendung von "D". # ------------------------------ # Der Befehl "D" nimmt nicht mehr als ein Argument an, und # dieses muss ein Funktionsname sein, wie etwa # sin, GAMMA, arctanh, oder auch eine anonyme Funktion wie # "x-->a+b*x+c*x^2 ": > D(sin); D(GAMMA); D(arctanh); > D(x->a+b*x+c*x^2); # Dabei ist Psi die bereits auf Seite 119 und 157 # aufgetretene Psi- oder Digammafunktion. # Man beachte, dass der output grunds"atzlich als Funktionssymbol # geschrieben wird. Wenn kein Name zur # Verf"ugung steht, verwendet Maple auch im output # anonyme Funktionen. # # Als input ist auch ein Funktionsname zul"assig, der ein # Programm aufruft, etwa: > hilfsfunktion := proc(x); if sin(x) > > cos(35*x) then sin(x) else > cos(35*x) fi end; > plot('hilfsfunktion(x)',x=0..6.3,numpoints=400); > D(hilfsfunktion); > plot('D(hilfsfunktion)(x)',x=0..6.3, > numpoints=400); # N"aheres zu dieser auch als "automatic differentiation" # bezeichneten F"ahigkeit findet man bei Heck, S.186. # # Da D ein Operator ist, also eine Abbildung von Funktionen # auf Funktionen (das Maple Language Reference # Manual, S.60, spricht von "functional operators"), # versteht D auch das Kompositionssymbol "@" (gelesen "at"). # # sin @ exp bedeutet die Hintereinanderausf"uhrung von exp und sin, # also # (sin @ exp)(x) = sin(exp(x)), # vgl. auch "?@" oder "?atsign". > ?@ > D(sin@exp); > g:=x->x^2; > D(sin@exp@g); # Diese Schreibweise ist gew"ohnungsbed"urftig: Die schmalen # Zwischenr"aume stehen f"ur Multiplikationszeichen, und in # Ermangelung eines Namens f"ur die Ableitung von g verwendet Maple die # anonyme Funktion (x--> 2x), also: # x-->cos({exp(g(x)})*{exp(g(x))}*2x # ist die Ableitungsfunktion. Leichter lesbar ist dasselbe unter # der "diff"- Schreibweise: > diff(sin(exp(x^2)),x); # Wenn die Syntax nicht stimmt, erh"alt man den unausgewerteten Befehl # zur"uck: > D(sin(x)); > D("); # In den folgenden Beispielen ist unklar, ob x^4 und # x^4+y*x^5 als Funktionswerte zum Argument x gemeint # sind oder die Ableitung nach t der Funktionen (x(t))^4 und # (x(t))^4 + y(t)*(x(t))^5 verlangt ist. Im ersten Fall l"age # ein Syntaxfehler vor. Maple nimmt an, es sei der zweite Fall # gemeint, und liefert die korrekten Ableitungen. > D(x^4); > D(x^4+y*x^5); # ============================================= # iii) H"ohere Ableitungen, sequence operator, repeated # composition operator. # ---------------------------------------------------------------------- # - # Sowohl "diff" als auch "D" sind f"ur wiederholte Anwendung # geeignet. F"ur "diff" gen"ugt es, die Variablenangabe zu wiederholen: > diff(x^n,x); diff(x^n,x,x); diff(x^n,x,x,x); > diff(x^n,x,x,x,x); # Eleganter schreibt sich das mit dem sogenannten "sequence # operator" $ (siehe "?$" oder "?dollar"). > x$5; > diff(x^n,x$5); # Die gewohnte Gestalt erh"alt man z.B. durch Anwenden von # "simplify" und "factor": > simplify(factor(")); # F"ur "D" hat man die M"oglichkeit, den # Differentiationsoperator selbst zu iterieren, indem man # ihn mittels @ mit sich selbst komponiert. Statt D@D@D@D@D # bietet Maple die Schreibweise D@@5. Der Operator # @@ heisst der "repeated composition operator" # (gelesen "at at") # und ist unter "?@@" oder "?atatsign" beschrieben. # # Dann muss die # 5-fach-Komposition (D@@5) jedoch stets in Klammern # gesetzt werden. > (D@@5)(x->a+b*x+c*x^2+d*x^4+e*x^5+f*x^6); # Einige M"oglichkeiten, es falsch zu machen: > D@@5(x->a+b*x+c*x^2+d*x^4+e*x^5+f*x^6); > D@5(x->a+b*x+c*x^2+d*x^4+e*x^5+f*x^6); > (D@5)(x->a+b*x+c*x^2+d*x^4+e*x^5+f*x^6); # ============================================ # b) Kettenregel, Fundamentalsatz, Ableitung der Umkehrfunktion. # ---------------------------------------------------------------------- # Aus den obigen Beispielen ist bereits ersichtlich, dass Maple die # Kettenregel beherrscht. Die Kettenregel steht auch f"ur Kompositionen # von abstrakten Funktionen zur Verf"ugung: > restart; > diff(f(g(x)),x); > D(f@g); # Auch der Fundamentalsatz ist formal implementiert: > diff(Int(f(t),t=0..x),x); > int(Diff(g(t),t),t=0..x); # Bemerkung zu "inert": # ----------------------------- # Hier ist es gleichg"ultig, ob die innere Operation als "inert"- # Befehl (d.h. in Grosschreibung) eingegeben wird oder nicht. Im zweiten # Fall dauert die Rechnung etwas l"anger. Im allgemeinen sollte man # daran denken, dass man bei einer Verkettung von Operationen einen # vorzeitigen Auswertungsversuch dadurch unterbinden kann, dass man den # betreffenden # Befehl in der "inert"-Version verwendet, vgl. # "?inert". # Auch die Ableitung einer abstrakten Umkehrfunktion wird von # Maple formal ausgef"uhrt. Dabei ist f@@(-1) das Zeichen f"ur die # Umkehrfunktion der Funktion f (repeated composition operator # mit Ordnung -1 ; vgl. "?@@"). > D(f@@(-1)); # In allen F"allen agiert Maple rein formal, d.h. ohne Pr"ufung der # Integrierbarkeit, Differenzierbarkeit oder Existenz der # Umkehrfunktion. # Entsprechendes gilt f"ur Formeln wie > diff(f(x)/g(x),x); # =========================================== # c) Kurvendiskussion, extrema, minimize, maximize, # showtangent, fsolve. # ---------------------------------------------------------------------- # ------ # i) "extrema" # --------------- # Maple hat einen Befehl "extrema" zur Bestimmung von Extremwerten von # Funktionen. Dieser Befehl # geh"ort zu den sogenannten "library functions" und # muss deshalb, falls er im derzeit aktiven worksheet # noch nicht benutzt worden ist, zun"achst mittels "readlib(extrema);" # geladen werden. Man kann auch das "student package" # laden oder den Befehl in der Form student[extrema] direkt # aufrufen. In der Beschreibung unter "?extrema" wird # u.a. gesagt, dass die Syntax zwei bis vier Parameter # akzeptiert, wovon die ersten zwei obligatorisch sind: Die Funktion, # deren Extrema zu bestimmen sind, (in der Form f(x) oder als # Funktionswert) und die eventuell leere Menge { } der gew"unschten # Nebenbedingungen. An dritter Stelle # steht die Variable und an vierter Stelle irgendein Name # in ' ', der aus einem Wort besteht: Wir schreiben hier # 'kritischePunkte'. > readlib(extrema): > f:=x->x^4-x^2; > extrema(f(x),{ }, x, 'kritischePunkte'); # Dies sind die (eventuell nur lokalen) Extremwerte oder auch # Wendepunkte mit horizontaler Tangente von f(x) # ohne Angabe, wie oft sie angenommen werden. Wie am folgenden Bild zu # sehen ist, nimmt f(x) den Wert 0 als lokales # Maximum einmal an und den Wert -1/4 als globales Minimum zweimal. > plot(f(x),x=-1.5..1.5, y=-.5...0.5); # Die "Kandidaten f"ur die zugeh"origen Argumentwerte" x gibt # Maple unter dem an der vierten Stelle genannten # Namen als eine Menge von Mengen von Gleichungen heraus: > kritischePunkte; # Das sind die Punkte, an denen die erste Ableitung von f # verschwindet, soweit Maple sie finden konnte, also die sog. kritischen # oder station"aren Punkte. # In diesem Falle liegen an allen drei Stellen lokale # Extrema. # Da Wendepunkte mit horizontaler Tangente zu den kritischen # Punkten geh"oren, k"onnen auch sie als Ergebnis erscheinen: > g:=x->1/sqrt(1+x^3); > extrema(g(x),{ }, x, 'kritischePunkte'); > kritischePunkte; > plot(g(x),x=-2..3); # Wir "uberzeugen uns davon, dass im Nullpunkt die erste und zweite # Ableitung verschwinden: > D(g); > D(g)(0); > D(""); > (")(0); # Man merkt sich also zweckm"assig, dass der Befehl # "extrema(f(x),{ },x,'kritischePunkte');" im # allgemeinen nur einen Teil der kritischen Punkte der Funktion f # liefert. # Bei der folgenden Aufgabe liefert Maple kein vern"unftiges # Ergebnis: > h:=x->exp(-x^2)-arctan(x); > extrema(h(x),{ }, x, 'kritischePunkte'); # Es er"ubrigt sich, die Bedeutung dieses Ergebnisses n"aher zu # untersuchen, denn zumindest einer der Extremwerte und einer der # kritischen Punkte wird von Maple als komplex angesehen. F"ur # komplexes x ist aber h(x) ebenfalls komplex, und somit eine # Extremwertbestimmung sinnlos: > evalf("); > kritischePunkte; > evalf("); # Wir holen den Kan didaten f"ur einen kritischen Punkt aus der # Mengenmenge mittels "op" heraus und "uberzeugen uns # davon, dass der oben erhaltene Extremwert tats"achlich der # Wert von h an dieser Stelle ist: > op([1,1,2],"); > h("); # Nun gibt es die M"oglichkeit, dem "extrema"--Befehl # zus"atzliche Nebenbedingungen mitzugeben. Wir formulieren als # Nebenbedingung, dass x reell sein soll, indem wir an zweiter # Stelle in die bisher leere Mengenklammer schreiben Im(x): # Das wird von Maple als die Gleichung Im(x)=0 interpretiert. # Um den Speicherplatz "kritischePunkte" zu r"aumen, machen wir # zugleich einen Neustart. # Dann erweist sich die Aufgabe leider als unl"osbar f"ur Maple: > restart; > h:=x->exp(-x^2)-arctan(x); > student[extrema](h(x),{Im(x)}, x, > 'kritischePunkte'); > kritischePunkte; # Mittels "plot" kann man sich jedoch davon "uberzeugen, dass # h(x) zwei relative Extrema besitzt (wir kommen unter iii) darauf # zur"uck): > plot(h(x), x=-3..3); # ========================================== # ii) "minimize", "maximize". # ---------------------------------------------------------- # Eine andere M"oglichkeit zum Bestimmen von Extremwerten ist # durch "minimize"und "maximize" gegeben. Wie unter # "?minimize" zu erfahren, verlangt die Syntax hier # als erstes Argument eine expression (Ausdruck, Funktionswert) # und als zweites (optional) eine oder mehrere Variable. Als drittes # Argument ist ein Bereich (Intervall, range) in der Form # {x=-1..0} zugelassen, auf den man die Suche beschr"anken will. # Diese Befehle geh"oren zwar auch zum package "student" # (siehe "?package", "?with" und "?student"), m"ussen aber nicht # gesondert geladen werden. # Wir untersuchen die obigen Beispiele f, g und h nochmals. # > restart; > f:=x->x^4-x^2:minimize(f(x),x);maximize(f(x),x); # Diese Werte sind richtig. # Wenn wir die Definition von g(x) so belassen, wie sie unter i) # gegeben wurde, erhalten wir auch hier einen komplexen Wert f"ur das # Minimum: > g:=x->1/sqrt(1+x^3):minimize(g(x),x); # Hier k"onnen wir die Ursache etwas genauer analysieren, weil die # Zwischenrechnungen einfacher sind als beim obigen Beispiel h. Maple # berechnet im Laufe des "minimize"-Programms explizit die Polstellen # der Funktion g(x) f"ur alle komplexen x und findet Pole bei x=-1, # x=1/2+i*sqrt{3}/2 und x=1/2-i*sqrt{3}/2. (Das kann man beobachten, # indem man # nach den Befehlen "interface(verboseproc=2);" und # "printlevel:=1000;" den Befehl "minimize(g(x),x);" # wiederholt. Danach zur"ucksetzen mit "interface(verboseproc=1);" # und "printlevel:=1".) Es ist zwecklos zu versuchen, durch # "assume(x>-1)" die komplexen Pole auszuschalten. # Wenn man "minimize" mit der Bereichsangabe x>-1 versieht, erscheinen # zwei Werte zur Auswahl: > minimize(g(x),x,{x=-1..infinity}); # Dies ist sicherlich nicht korrekt. # Bei der Funktion h(x) ergibt sich eine etwas ver"anderte, aber nicht # unbedingt verl"assliche Antwort: > h:=x->exp(-x^2)-arctan(x): > minimize(h(x),x); # Die RootOf--Funktion gibt hier ohne besondere Aufforderung einen # numerischen Wert an, aus dem hervorgeht, dass sie jetzt eine reelle # Zahl darstellt. Wir werten h an dieser Stelle aus und betrachten # genauso das Maximum: > evalf("); > maximize(h(x),x); > evalf("); # Seltsamerweise sind die Ergebnisse in beiden F"allen gleich. # Im Unterschied zu "extrema" haben wir jetzt die M"oglichkeit, # die Extremalaufgabe durch Angabe eines Intervalls einzuschr"anken. # Das bringt uns zwar beim Minimum nicht weiter: > minimize(h(x),x,{x=-2..-1}); # denn der neu hinzugekommene Wert ist ein triviales Extremum an einem # Intervallende. Das sieht man leicht, wenn man diesen Wert # abfragt: > h(-2); # Aber beim Maximum zeigt sich ein Effekt: > maximize(h(x),x,{x=-1..0}); > evalf("); # Im n"achsten Abschnitt wir sich z eigen, was davon zu halten ist. # ============================================ # iii) "student[showtangent]" und "fsolve". # --------------------------------------------------- # # Im "student--package" hat Maple den Befehl "showtangent". # Er gibt auf die Eingabe "showtangent(f(x), x = a);" eine Grafik aus, # die die Funktion f(x) mit ihrer Tangente an der Stelle (a,f(a)) zeigt. # Wir benutzen den Doppelbefehl "student[showtangent]" und behandeln # nochmals die unter i) definierte Funktion h(x): Deren Extrema liessen # sich bisher weder mit "extrema" noch mit "minimize/maximize" # vollst"andig bestimmen. # Anhand der Grafik kann man deren Abszissen ungef"ahr ablesen # und durch Abrufen der Tangente pr"ufen, ob man das Extremum getroffen # hat: > student[showtangent](h(x),x=-0.509); > student[showtangent](h(x),x=-1.57); # Es erweist sich als schwierig, die Extrema einigermassen genau # zu treffen. Da dabei ohnehin nur ein Fliesskommawert f"ur die Abszisse # herauskommt, kommen wir nochmals auf die unter i) versuchte Bestimmung # der Nullstellen der # Ableitung zur"uck. Diesmal verwenden wir "fsolve": Dieser Befehl # liefert eine einzelne numerische L"osung einer Gleichung, falls # m"oglich. # Wie unter "?fsolve" beschrieben, ist in schwierigen F"allen die # Angabe eines Intervalls hilfreich, in dem die L"osung zu suchen ist. # Ohne Intervallangabe ist das Problem zu schwierig: > fsolve(diff(h(x),x),x); # Passende Intervalle sind aber leicht aus der Grafik zu entnehmen: > fsolve(diff(h(x),x),x,-2..0); > fsolve(diff(h(x),x),x ,-2..-1); # Nun versuchen wir nochmals "sh owtangent", diesmal mit den # genaueren x-Werten, und kopieren die beiden Grafiken mittels "display" # "ubereinander. Geringe Ungenauigkeiten sind dann besser zu erkennen. # Der "display"-Befehl wird hier mittels "plots[display]" aufgerufen, # da er zum "plots"-package geh"ort. > Bild1:=student[showtangent](h(x), x=""): > Bild2:=student[showtangent](h(x), x=""): > plots[display]({Bild1,Bild2}); > # Insbesondere zeigt sich, dass die unter ii) erhaltenen Ergebnisse # beide dem relativen Maximum zuzuordnen sind, d.h. das Ergebnis von # minimize war falsch.