%htmlDTD; ]> Automatische Berechnung von Grenzwerten und Implementierung in Mathematica Zurück - Inhalt - Übersicht - Vorwärts

1 Einführung

Die Grenzwertberechnung ist eine häufig auftretende Problemstellung in der Mathematik, die zugleich auch zu den schwierigsten Aufgaben zählt: Es gibt kein universelles Lösungsschema, nur verschiedene Ansätze, die in bestimmten Situationen zum Erfolg führen können. Gleichzeitig muss man bei der Lösung sehr sorgfältig vorgehen, da die Intuition hier oft trügerisch ist und die präzisen Randbedingungen meist entsprechend komplex ausfallen.

Seit es Rechenmaschinen gibt, existiert daher auch der Wunsch, diese 'lästige' Aufgabe den Rechenmaschinen zu überlassen. Leider stellen sich dabei die meisten Computer als nicht viel besser heraus, als ihre menschlichen Pendants.

1.1 Numerische Ansätze

Jeder Schüler hat schon einmal mit seinem Taschenrechner ausprobiert, welches grobe Ergebnis eine Grenzwertaufgabe wohl hat. Wie vollkommen falsch man damit liegen kann, verdeutlicht folgendes Beispiel:
lim x 0 x 1 -lnlnlnln1 x
Tippt man diese Funktion in einen normalen Taschenrechner mit x =10 - 99 ein, so ergibt sich ein 'Grenzwert' von 1 .1285110 - 47 , was mehr als stark auf einen Grenzwert von 0 hindeutet. Jeder Schüler und viele Nicht-Mathematiker wären jetzt bereits überzeugt.

Moderne Computeralgebraprogramme bieten natürlich eine höhere Rechengenauigkeit und können diese Funktion auch noch für x =10 - 100000 berechnen. Damit ergibt sich der Funktionswert 1 .066910 - 7836 . Also ist der Grenzwert doch 0?

Lassen wir zum Abschluss noch einmal Mathematicas NLimit-Funktion ihr Glück versuchen:
In[1]:=
Needs [ NumericalMath`NLimit` ]
In[2]:=
NLimit [ x ^ ( 1 - Log [ Log [ Log [ Log [ 1 / x ] ] ] ] ) , x 0 , Scale 1 / 10 ]
Out[2]=
8.137815014331272 × 10 - 7 + 8.856649445379649 × 10 - 7
Auch Mathematica scheint also eher an 0 als Lösung zu denken.

Erfahrenere Mathematiker riechen natürlich schon die Gefahr: Der Logarithmus ist dafür bekannt, ein sehr langsames, aber dennoch beständiges Wachstum gegen Unendlich zu besitzen. Die Verkettung mehrerer Logarithmen verstärkt diesen Effekt derart, dass das Wachstum von 1 x für x 0 extrem lange unterdrückt wird. Erst bei etwa 10 - 579203 fängt die Funktion wieder an zu wachsen, bei etwa 10 - 1656521 wächst der verkettete Logarithmus über 1 und das Vorzeichen im Exponenten kippt. Danach beginnt das langsame Wachstum gegen Unendlich.

Numerische Verfahren sind trotz moderner Mathematiksoftware immer nur zu einer begrenzten Genauigkeit in der Lage. Doch selbst einfach wirkende Aufgaben können diese Genauigkeit bereits überfordern.

1.2 Grenzwert einer Funktion

Natürlich kennt die Mathematik eine eindeutige Definition des Grenzwertes. Hier noch mal die Kompaktfassung einer der übersichtlicheren Definitionen:



Definition 1.1 : Grenzwert einer Funktion. Eine Funktion f (x) mit Definitionsbereich D (f) hat für x x 0 den Grenzwert a,
lim x x 0 f(x)=a,
wenn x0 ein Häufungspunkt von D (f) ist, und wenn für jedes ε >0 ein δ existiert, so dass für alle x aus D (f)U δ die Ungleichung | f(x)-a|<ε gilt. Dabei ist U δ ={x0<|x-x 0|<δ} , wenn x 0 ist und U δ ={xx>δ} , wenn x 0 = ist. Außerdem gilt lim x - f(x):=lim x f(-x) .



Definition 1.2 : Grenzwert im Unendlichen. Eine Funktion f (x) mit Definitionsbereich D (f) hat für x x 0 den Grenzwert + ,
lim x x 0 f(x)=+,
wenn x0 ein Häufungspunkt von D (f) ist und wenn für jedes C ein δ existiert, so dass für alle x aus D (f)U δ die Ungleichung f (x)>C gilt. Dabei ist U δ :={x0<|x-x 0|<δ} , wenn x 0 ist, und U δ :={xx>δ} , wenn x 0 = ist. Entsprechend gilt lim x x 0 f(x)=- , wenn lim x x 0 -f(x)= gilt. Außerdem gilt wieder lim x - f(x):=lim x f(-x) .

Wenn das Definieren von Grenzwerten so einfach ist, wo ist dann das Problem? Das Problem ist, dass es sich nicht um eine konstruktive Definition handelt. Die Definition sagt uns nicht, wie wir den Grenzwert finden, und das Kriterium, das zur Überprüfung des Grenzwertes erforderlich ist, eignet sich eher für theoretische Beweise, als für praktische Tests.

1.3 Heuristische Lösungsverfahren

Dem Mathematiker stehen zur Grenzwertberechnung neben der reinen Definition auch große Tabellen mit fertig berechneten Grenzwerten für bestimmte Funktionen und ein Sortiment aus Sätzen und Regeln zur Verfügung. Mit Erfahrung und Intuition lässt sich so meist eine Herleitung des Grenzwertes finden. Sucht man zum Beispiel
y 0 =lim x x 0f(x)
und kann f (x) darstellen als g ( h( x ) ) , so kann der Grenzwert in zwei Schritten berechnet werden:
z 0 =lim x x 0h(x)
y 0 =lim z z 0g(z)
Das klappt gut, selbst wenn z 0 nicht endlich ist. Wichtig ist aber, dass g nur von z abhängt und nicht zusätzlich von x.

Eine weitere bekannte Regel ist die Regel von Bernoulli / De l'Hôpital. Sie wird angewendet, wenn in einem Ausdruck ein Term folgender Form auftritt:
lim x x 0 f (x)g (x)
der sich beim Grenzübergang verhält wie 0 0 oder . Das Grenzwertverhalten lässt sich dann unter bestimmten Bedingungen durch das Grenzverhalten von f '(x)g '(x) ersetzen. Allerdings ist die Gültigkeit dieser Regel an einige Randbedingungen geknüpft, die präzise eingehalten werden müssen. Insbesondere die Bedingung, dass g '(x)0 in einer ganzen Umgebung von x0 gelten muss, ist für ein Computeralgebrasystem schwer zu überprüfen, zumal schon eine harmlos wirkende Vereinfachung diese Störung verdecken kann.

Eine weitere Technik ist z.B. das Squeeze-Theorem: Dazu muss man die Funktion wie in einer Art Trichter zwischen zwei anderen Funktionen einsperren. Haben beide Funktionen einen gemeinsamen Grenzwert, so muss auch die eigentliche Funktion in diesem Grenzwert gefangen sein.

Es gibt viele solche Tricks zum Umgang mit Grenzwerten. All diesen Verfahren gemein ist jedoch die Tatsache, dass sie keine klare Strategie besitzen. Die Anwendung einer bestimmten Regel kann zur Lösung führen, kann aber auch eine Sackgasse sein. Ein Mathematiker kann das Ergebnis intuitiv einschätzen und beurteilen, ob dieser Schritt sinnvoll ist. Ein Computerprogramm verirrt sich dagegen leicht im Labyrinth der Möglichkeiten.

1.4 Potenzreihenentwicklung

Für Algorithmen der Computeralgebra ist ein Umdenken erforderlich. Klare Strategien sind nötig, die zuverlässig zum Ziel führen. Dafür kann man die Vorteile der Computeralgebra nutzen: Komplexe Terme und extrem lange Rechenwege sind kein Problem.

Um den Grenzwert einer rationalen Funktion zu berechnen, bietet sich eine Potenzreihenentwicklung als Hilfsmittel an: Jede rationale Funktion lässt sich als Laurentreihe darstellen:
f (x)( x )f(x)= k =k 0 a k( x-x 0 ) k( k 0 )
(Man beachte, dass im Gegensatz zur Taylorreihe k 0 auch negativ sein kann.) Für Funktionen f 0 kann außerdem a k 0 0 als Normalform angenommen werden.
Ist man nun an lim x x 0 f(x) interessiert, kann das Ergebnis an k 0 und a k 0 abgelesen werden:
lim x x 0 f(x) = 0 , wenn k 0>0 ist, lim x x 0 f(x) = a 0 , wenn k 0=0 ist, lim x x 0 + f(x) = Sign (a k 0 ) , wenn k 0<0 ist, lim x x 0 - f(x) = Sign (a k 0 ) , wenn k 0<0 und k 0 gerade ist, lim x x 0 - f(x) = - Sign(a k 0 ) , wenn k 0<0 und k 0 ungerade ist.
Schauen wir uns das in der Praxis an:
In[1]:=
f = ( x ^ 3 - 2 x ^ 2 - 9 x + 18 ) / ( x ^ 3 + x ) ;
In[2]:=
Series [ f , { x , 0 , 3 } ]
Out[2]=
18 x - 9 - 20 x + 10 x 2 + 20 x 3 + O [ x ] 4
Am Ergebnis kann man direkt ablesen, dass das Grenzverhalten für x 0 genau dem von 18 1 x entspricht. Dieser Term der Reihe dominiert das Wachstum, alle positiven Potenzen liefern sogar einen Null-Beitrag für x 0 .

Mit dem klassischen Verfahren zur Ermittlung von Taylorreihen kommt man hier allerdings nicht weit: Schon zur Ermittlung des ersten Terms der Taylorreihe benötigt man f (x 0) und damit genau den Grenzwert, der eigentlich gesucht ist.

Computeralgebrasysteme sind allerdings in der Lage, Potenzreihenentwicklungen von Funktionen bis zu einem vorgegebenen Grad sehr effizient zu berechnen: Potenzreihen von Grundfunktionen werden fest integriert, und komplexere zusammengesetzte Funktionen werden aus den Potenzreihen ihrer Teilausdrücke durch Transformationen entwickelt. Ableitungen und Grenzwerte sind dafür (zum Glück) nicht mehr erforderlich.

Die Potenzreihenentwicklung ist daher für die Grenzwertberechnung ein attraktives Verfahren, das sich geradezu anbietet zur Implementierung in Computeralgebra-Systemen: Das Erzeugen einer Potenzreihe zu einer Funktion ist ein Standardverfahren, und das Ergebnis kann schnell daran abgelesen werden. Der Algorithmus terminiert immer und liefert immer ein korrektes Ergebnis ab. Wo also ist der Haken?

Betrachten wir die folgende Funktion:
f (x)=e - 1 x 2
Zur Ermittlung der zugehörigen Taylorreihe für x 0 =0 benötigt man deren Ableitungen:
f '(x) = 2 x 3 e - 1 x 2 f ''(x) = ( 4 x 6 -6 x 4 )e - 1 x 2 f '''(x) = ( 8 x 9 -36 x 7 +24 x 5 )e - 1 x 2  
Offensichtlich taucht die ursprüngliche Funktion als Faktor in ihren Ableitungen wieder auf, mit einem rationalen Ausdruck als Vorfaktor. Da das Wachstum der Exponentialfunktion jede rationale Funktion dominiert und die Funktion selbst gegen e - =0 strebt, gilt für alle Ableitungen f ( k) (0)=0 , und damit gilt für die Taylorreihe ebenfalls a k =0 für alle k, was der Taylorreihe der 0-Funktion entspricht. Offensichtlich ist eine Potenzreihe also keine geeignete Repräsentation für diese Funktion.

Die Exponentialfunktion hat in diesem Fall eine essenzielle Singularität, denn sie hat eine Nullstelle, die so stark ist, dass x - k f(x) für kein k stark genug ist, um die Nullstelle zu 'heben'. Entsprechend kann keine endliche Potenz der Potenzreihe die Funktion repräsentieren.

Nur Funktionen, deren Nullstellen und Unendlich-Stellen hebbar sind, d.h. durch Multiplizieren mit x k verschwinden, lassen sich durch Potenzreihen sinnvoll darstellen. Trotzdem ist das Grenzverhalten der Exponentialfunktion überschaubar. Die Potenzreihen-Analyse lässt sich problemlos auf das Argument - 1 x 2 anwenden, lim x 0 -1 x 2 ergibt - . Durch das Anwenden der Exponentialfunktion ergibt sich dann ein Grenzwert von 0.

Verfolgen wir die Strategie an einem komplexeren Beispiel weiter, diesmal für x :
In[1]:=
f = 3 + 2 x 3 2 - x 2 1 + 3 x 2 5 - x 2 ;
Diesmal treten zwei auf den ersten Blick verschiedene Exponential-Funktionen auf, die jedoch ein sehr ähnliches asymptotisches Grenzverhalten besitzen: e 2 -x 2 e 5 -x 2 =e - 3 .

Die Behandlung des Arguments der Exponentialfunktion fällt wieder leicht, denn es ist auch für den Computer leicht einzusehen, dass lim x e 2 -x 2=0 ist, und dass der Grenzwert exponentiell gegen 0 strebt. Ersetzt man nun in der Funktion e 2 -x 2 durch ω , und e 5 -x 2 durch e 3 ω , ergibt sich folgende Funktion:
In[2]:=
f = f /. { 2 - x 2 ω , 5 - x 2 3 ω }
Out[2]=
3 + 2 x 3 ω 1 + 3 3 x 2 ω
In dieser Funktionsdarstellung strebt ω exponentiell gegen 0, wenn x linear gegen strebt.

Das Wachstumsverhalten von x können wir daher vorübergehend ignorieren, da es durch das Wachstumsverhalten von ω dominiert wird. Ein stärkeres Wachstum als das von ω tritt außerdem nicht auf. Daher können wir eine Potenzreihenentwicklung in ω, entwickelt in ω 0 =0 , durchführen:
In[3]:=
Series [ f , { ω , 0 , 2 } ]
Out[3]=
3 + ( - 9 3 x 2 + 2 x 3 ) ω + ( 27 6 x 4 - 6 3 x 5 ) ω 2 + O [ ω ] 3
Und wieder kann das Ergebnis direkt abgelesen werden: lim x f(x)=3 . Alle anderen Terme bestehen aus einem polynomiell wachsenden Faktor und einer Potenz von ω. Da ω exponentiell wächst, dominiert ω das Wachstum der polynomiellen Faktoren, und da ω gegen 0 strebt, bleibt nur der 3-Term übrig.

Im Wesentlichen haben wir damit die Strategie des MrvLimit-Algorithmus bereits erreicht. Im nächsten Kapitel verschaffen wir uns daher einen ersten Überblick.
Zurück - Inhalt - Übersicht - Vorwärts