# Kapitel 21: Grenzwerte von Funktionen # =========================== # Wie bereits in Kapitel 11 gesagt, gibt es f"ur Maple keinen # Unterschied zwischen den Grenzwerten einer Folge und einer Funktion. # Deshalb ist der Inhalt von Kapitel 11 sinngem"ass f"ur Grenzwerte von # Funktionen g"ultig. # # a) Einfache Beispiele aus den "Ubungen zur Analysis I # ----------------------------------------------------------------- > restart; > Limit((x^3+x^2-x-1)/(x^2-1), > x=1)=limit((x^3+x^2-x-1)/(x^2-1), x=1); > Limit((exp(x)-1)/x,x=0)=limit((exp(x)-1)/x, > x=0); > Limit(x*(1-sqrt(1-1/x)),x=infinity)=limit(x*(1-sqrt(1-1/x)), > x=infinity); > Limit(exp(-1/x), x=0)=limit(exp(-1/x), > x=0); > Limit(exp(-1/abs(x)),x=0)=limit(exp(-1/abs(x)), x=0); # In limit(floor(x+1/2)/x,x=0) steht "floor" f"ur die Gauss-Klammer : > Limit(floor(x+1/2)/x,x=0)=limit(floor(x+1/2)/x,x=0); # Beim "arccos" nimmt Maple den Hauptwert: > Limit(arccos(x), x=0)=limit(arccos(x),x=0); > plot(arccos(x), x=-1..1); # ======================================== # b) Richtungsgrenzwerte, reelle oder komplexe Variable # ------------------------------------------------------------------ > ?limit # Unter "?limit" findet man u.a.: # # Calling Sequence: # # limit(f,x=a,dir); # f - an algebraic expression # x - a name # a - an algebraic expression (limit point, possibly infinity, or # -infinity) # dir - (optional) direction: one of left, right, real, or complex # # If dir is not specified, the limit is the real bidirectional limit, # except in the # case where the limit point is infinity or -infinity, in which case # the limit is from the left to infinity and from the right to # -infinity. # For help with directional limits see limit[dirs]. # # (Hier Zusatz zum Skript) # # limit will assume that any unassigned variables in the expression are # real and nonzero (as signum assumes). Thus, limit(a^2*x, x=infinity) # will return infinity. # # Einige einfache Beispiele f"ur einseitige Grenzwerte haben wir bereits # am Ende von Kapitel 17 gesehen: > limit(frac(x),x=1,left); limit(frac(x),x=1,right); > limit(frac(x),x=1); > plot(frac(x),x=0..2,discont=true); # Wenn limit(f(x),x=a) verlangt wird, sieht Maple die # LAUFVARIABLE x als reell an und versucht, den gew"ohnlichen # (beidseitigen) Grenzwert zu bestimmen. Dabei ist es durchaus erlaubt, # dass die WERTE des Ausdrucks f in der N"ahe des Punktes a komplex # sind. # Im folgenden Beispiel treten f"ur x<0 komplexe Werte auf. Wir # vergleichen den Grenzwert mit den einseitigen Grenzwerten und # "uberzeugen uns davon, dass die Ergebnisse stimmen: > [limit(x^x, x=0), limit(x^x, x=0,left), > limit(x^x, x=0,right)]; # F"ur negative x ist x^x eine komplexe Zahl. Um dies schnell zu # "uberpr"ufen, verwenden wir hier den "plot"-Befehl: # Die komplexen Werte (hier die negativen x) werden nicht # dargestellt. Also ist x^x f"ur x<0 komplex. > plot(x^x, x=-1..3); # Um den Grenzwert limit(x^x,x=0,left) auf anderem Wege zu berechnen, # ersetzen wir ihn durch den Grenzwert limit(x^x,t=0,right) mit > x=t*exp(I*Pi)# = -t , also durch # > limit ((1/t)^t*exp(-I*Pi*t), t=0, right); # # =========================================== # b) Fehlende Information "uber Parameter und "assume". # -------------------------------------------------------------------- # Wie bereits in Kapitel 4 gesehen, kann Maple gewisse Grenzwerte nicht # bestimmen, wenn zu wenig Informationen "uber darin vorkommende # Parameter vorhanden sind. Maple geht (trotz z.Zt. gegenteiliger # Aussage unter "?limit") grunds"atzlich davon aus, dass Parameter als # komplexe Zahlen zu interpretieren sind. Also ergibt der Befehl > limit(a^2*x,x=infinity); # wobei signum(a) durch # signum(a) = a/abs(a) # f"ur a<>0 definiert ist, vgl. auch "?signum". # # Erst wenn a ausdr"ucklich als reell erkl"art worden ist, wird dieser # Grenzwert als infinity berechnet: > assume(a,real):Limit(a^2*x,x=infinity)=limit(a^2*x,x=infinity);a:='a': # Dieses Beispiel zeigt zugleich, dass Maple stets voraussetzt, alle # Parameter seien ungleich Null. Auch hier ist es dem Benutzer # "uberlassen, den G"ultigkeitsbereich des Resultats (a<>0 im obigen # Fall) selbst zu bestimmen. # Zwei weitere Beispiele: > Limit(q^x,x=infinity)=limit(q^x,x=infinity); > assume(q,real);additionally(q>-1);additionally(q<1); > about(q); > Limit(q^x,x=infinity)=limit(q^x,x=infinity); # Dieselbe Aufgabe mit komplexem q: # Wie bereits auf Seite 87 gesehen, kann die # Annahme, q sei komplex und erf"ulle |q| < 1 , von "assume" # nicht direkt verarbeitet werden. Stattdessen setzen wir # q=r*exp(I*phi) und machen die Annahme 0<=r <1 : > q:='q':assume(r,RealRange(0,Open(1)));about(r); > Limit((r*exp(I*phi))^x,x=infinity)=limit((r*exp(I*phi))^x,x=infinity); # Hier muss noch ein "simplify" eingebaut werden: > limit(simplify((r*exp(I*phi))^x),x=infinity); # Beim folgenden Beispiel ist ein Ausnahmewert des Parameters y # zu beachten: > Limit((1/(1+y^2))^x,x=infinity)=limit((1/(1+y^2))^x,x=infinity); > assume(y,real);about(y); > Limit((1/(1+y^2))^x,x=infinity)=limit((1/(1+y^2))^x,x=infinity);y:='y' > : # Ausnahmewert: F"ur y=0 ist der Grenzwert =1. # ---------------------------------------------------------- # Ein Beispiel mit zwei Parametern: # > Limit((x^n-1)/(x^m-1),x=1)=limit((x^n-1)/(x^m-1),x=1); # Hier "uberzeugt man sich z.B. mittels der Regel von L'Hospital # davon, dass das Ergebnis f"ur alle komplexen m,n mit m<>0 richtig ist. # ================================================ # d) Verbesserung der Effektivit"at mittels "Order" # ----------------------------------------------------------- # Unter "limit" wird u.a. gesagt: # - Most limits are resolved by computing series. By increasing the # value of the global variable Order, limit will increase its ability to # solve problems with significant cancellation. # Damit ist folgendes gemeint: Bei der Auswertung eines Grenzwertes der # Form > Limit((cos(x)-(1-1/2*x^2+1/24*x^4-1/720*x^6+1/40320*x^8))/x^10, > x=0)=limit((cos(x)-(1-1/2*x^2+1/24*x^4-1/720*x^6+1/40320*x^8))/x^10, > x=0); > 10!; # benutzt Maple die Taylorentwicklung der Funktion cos(x) um den # Nullpunkt bis zu einem bestimmten Term x^k, wobei k vom derzeitigen # Wert der environment variable "Order" abh"angt. Deren normaler Wert # ist 6, d.h. eine Taylorentwicklung wird normalerweise bis maximal x^5 # berechnet, und das Restglied verh"alt sich dann i. a. wie x^6. > Order; # Ein Beispiel f"ur eine beim Index 6 abgebrochene Reihenentwicklung: > series(exp(x),x); # Demnach d"urfte obiger Grenzwert garnicht berechnet werden. De facto # arbeitet limit beim vorliegenden Beispiel jedoch mit # max(12, Order). # Entsprechend wirkt sich ein Erh"ohen von Order erst ab einem Wert von # 13 aus. Als Test untersuchen wir ein Beispiel, bei dem eine # Entwicklungsordnung von 12 nicht mehr ausreicht: > Order:=13; > series(cos(x),x); > limit((cos(x)-(1-1/2*x^2+1/24*x^4-1/720*x^6+1/40320*x^8 > -1/3628800*x^10))/x^12, x=0); # und erh"ohen jetzt die Ordnung um 1: > Order:=13; # Jetzt ist die Entwicklung so weit getrieben, dass das Restglied eine # h"ohere x-Potenz als der Nenner enth"alt, und der Grenzwert ist > Limit((cos(x)-(1-1/2*x^2+1/24*x^4-1/720*x^6+1/40320*x^8-1/3628800*x^10 > ))/x^12, > x=0)=limit((cos(x)-(1-1/2*x^2+1/24*x^4-1/720*x^6+1/40320*x^8-1/3628800 > *x^10))/x^12, x=0); # Angesichts der bekannten cos -Reihe sollte das die Zahl 1/12! sein: > 12!; # Wenn man nun den Wert von "Order" wieder auf 6 zur"ucksetzt und den # zuletzt gegebenen limit-Befehl wiederholt, wird er wunschgem"ass # ausgef"uhrt, solange auf die fr"uheren Daten zur"uckgegriffen werden # kann. Siehe hierzu "?remember". # ============================================= # e) Grenzwerte f"ur Funktionen mit Fallunterscheidung # ------------------------------------------------------------------ # Zun"achst die Beispiele aus Kapitel 17 b): # Die Sprungstelle an der symbolischen Stelle a macht Schwierigkeiten, # auch wenn man nachtr"aglich a=1 setzt: > f1:= proc(x,a) if x end; > limit(f1(x,a),x=a,left); Error, (in f1) cannot evaluate boolean # Nat"urlich brauchen wir zun"achst einmal "unevaluation quotes": > limit('f1(x,a)',x=a,left); > a:=1:limit('f1(x,a)',x=a,left);a:='a': > limit('f1(x,1)',x=1,left); # ---------------------------------------------------------------------- # --- # Die Heaviside--Funktion macht keine Probleme: > f2:=Heaviside; > limit(f2(x),x=0,left);limit(f2(x),x=0,right); # Als Beispiel f"ur eine "piecewise-Funktion" w"ahlen wir hier # eine im Punkte x=1 stetig erg"anzte Funktion: > f3:=x->piecewise(x<1,(x^2-1)/(x-1),x=1,2,x>1,(x^2-1)/(x-1)); > limit(f3(x),x=1); # F"ur das folgende Beispiel haben wir schon in Kapitel 17 gesehen, # dass Maple den Grenzwert nicht berechnet: > limit(x*floor(1/x),x=0,right); # ---------------------------------------------------------------------- # ----------- # Nochmals eine Funktion von der Art wie f3, diesmal durch ein Programm # definiert und unstetig erg"anzt an einer als Zahl gegebenen Stelle: > f4:=proc(x) if x=1 then 1 else (x^2-1)/(x-1)fi end; > {limit(f4(x),x=1,left), limit(f4(x),x=1,right), > limit(f4(x),x=1)}; # ---------------------------------------------------------------------- # ---- # Schliesslich eine durch eine "expression" definierte Funktion: > f5:=(x^2-1)/(x-1); > limit(f5, x=1, right); # ========================================== # f) Eine pathologische Funktion # -------------------------------------- # Ein interessantes Beispiel f"ur die Stetigkeit ist die Funktion # f(x) f"ur reelles x, mit den Werten # 1/n(x) , f"ur rationales x # 0 , sonst. # Dabei sei n(x) die kleinste nat"urliche Zahl n mit der Eigenschaft # dass n*x ganzzahlig ist (also der Nenner der rationalen Zahl x nach # eventuellem K"urzen). # # f(x) ist stetig an jedem irrationalen x und unstetig an jedem # rationalen x. Es ist nicht sinnvoll, f(x) zu programmieren, um mit # Maple den obigen Grenzwert zu berechnen. Es ist jedoch # hilfreich und nicht schwierig, den Funktionsverlauf graphisch # darzustellen. # Wir beschr"anken uns dabei auf das Intervall [-1,1]. # Wenn x=p/q ist mit teilerfremden ganzen Zahlen p,q, dann ist n(x)=q. # Also ist # n(1/2)=2, # n(1/3)=n(2/3)=3, # n(1/4)= n(3/4)=4, # n(1/5)=n(2/5)=n(3/5)=n(4/5)=5, u.s.w. # Der Graph der Funktion besteht also f"ur die rationalen x in [0,1] aus # den Punkten (hier als Listen geschrieben): # [1/2,1/2], # [1/3,1/3], [2/3,1/3], # [1/4,1/4], [3/4, 1/4], # [1/5,1/5], [2/5,1/5], [3/5,1/5], [4/5,1/5], u.s.w., # und f"ur die irrationalen x aus den Punkten [x,0]. Ein Programm, das # die den rationalen x entsprechenden Punkte vom Nenner 2 bis zum Nenner # n in Form einer f"ur den "plot"-Befehl geeigneten Liste von # Koordinatenpaaren erzeugt, kann nach dem Muster von Kapitel 12 # geschrieben werden: > beisp:=proc(n) lo\cal p, q, result, B; if n < 3 then FAIL else > result:= [[ 1/2, 1/2 ]] ; for q from 3 to n do for p from 1 to q > do if gcd(p, q) > 1 then FAIL else B := [ p/q, 1/q] ; result := [ op( > result ), B ]; fi; od ; od; fi ; result ; end ; # Ein Test mit n=5: > beisp(5); > plot(beisp(100),style=point,symbol=POINT); > plot(beisp(100),style=point,symbol=CROSS); # Anzahl der Punkte f"ur $n=100$: > nops(beisp(100)); # Dieses Bild ist durch die Funktionswerte [x,f(x)] mit 0<=f(x)<1/100 zu # erg"anzen. # Hinweis # ====== # In einigen F"allen liefert "limit" falsche Ergebnisse. Siehe dazu # Heck , S. 290--291. Dort findet sich auch ein Vorschlag, wie man # den Fehler beheben kann. # # Weitere Bemerkungen "uber "Fehler" sind auf der Internet--Seite der # Maple User Group Answers: # http://samuel.math.rwth--aachen.de/MapleAnswers/ # zu finden unter den Stichworten: # # bug in limit, # bug in limit(c/x/ln(x)), # limit evaluation, # limit question.