%htmlDTD;
]>
Automatische Berechnung von Grenzwerten und Implementierung in Mathematica
Zurück - Inhalt - Übersicht - Vorwärts
2 Überblick über den Algorithmus
Der Kern des MrvLimit-Algorithmus ist die Potenzreihenentwicklung. Da die Potenzreihenentwicklung
jedoch nur mit polynomiellem Wachstum zuverlässig umgehen kann, muss die Funktion so angepasst
werden, dass sie aus Sicht der Potenzreihenentwicklung nur polynomiell wächst. Langsameres
Wachstum wird dazu vorübergehend ausgeblendet.
Bevor wir uns in Kapitel 3 mit den mathematischen Details intensiver beschäftigen,
werfen wir aber schon mal einen Blick auf die grobe Strategie des MrvLimit-Algorithmus für eine
Funktion .
- Transformation der allgemeinen Grenzwertaufgabe in
eine Grenzwertaufgabe der Form .
- Isolieren desjenigen Teilausdrucks der Funktion, der das größte asymptotische
Wachstumsverhalten besitzt.
- Bestimmen aller Teilausdrücke, die das gleiche Wachstumsverhalten besitzen wie der
ausgewählte Teilausdruck.
- Darstellen all dieser Teilausdrücke mit Hilfe einer einzelnen Variable ω, die das
größte Wachstumsverhalten repräsentiert. Alle verbleibenden Terme müssen signifikant schwächeres Wachstum haben.
- Ermitteln der Potenzreihe in ω und Ermittlung des führenden Terms der Potenzreihe.
Dabei kann x als konstant betrachtet werden.
- Falls erforderlich, weitere Analyse des führenden Terms durch rekursive Grenzwertberechnungen.
- Abschließende Bestimmung des Grenzwerts durch Analyse des führenden Terms.
Dieser Überblick ist natürlich sehr knapp ausgefallen. Deswegen werden im Folgenden ein paar Themen
noch detaillierter besprochen.
2.1 Transformation
Um den Algorithmus überschaubar zu gestalten, werden grundsätzlich nur Grenzwerte für
betrachtet. Andere Grenzwerte lassen sich leicht
durch Transformation ermitteln:
Beidseitige Grenzwerte löst man, indem der Grenzwert aus beiden Richtungen separat
ermittelt und verglichen wird.
2.2 Wachstumsklassen
Wie in der Computeralgebra üblich, gehen wir davon aus, dass unsere zu analysierende
Funktion explizit in Form eines Funktionsausdrucks in Baumstruktur vorliegt. Vorläufig begrenzen wir
auch die Funktionsvielfalt auf Konstanten, die Variable x sowie die beliebige Anwendung der
Grundrechenoperationen Addition, Subtraktion, Multiplikation, Division, Potenzfunktion,
Exponentialfunktion und Logarithmus. Später wird dieses Grundgerüst um weitere Funktionen ergänzt,
die sich in der Praxis als leicht behandelbar erweisen.
Liegt eine Funktion als Baumstruktur vor, ist es einfach, sämtliche Teilausdrücke zu
betrachten. Diese Teilausdrücke müssen dann anhand ihrer asymptotischen Wachstumseigenschaften
geordnet werden. Wie genau
das erfolgt, wird Kapitel 3 zeigen. Es sei auch schon mal darauf hingewiesen, dass im
Folgenden oft auch gegen Null strebendes Grenzverhalten der Einfachheit halber als Wachstum
bezeichnet wird. Für unsere Fälle hat also sowohl als auch für
exponentielles Wachstum, im zweiten Fall jedoch exponentielles Wachstum
gegen 0.
Ist der am stärksten wachsenden Teilausdruck
gefunden, kann er als ω zu einem Symbol substituiert werden, für die spätere
Potenzreihenentwicklung. Vorher müssen aber alle Terme, die einen relevanten Beitrag zu dieser
Potenzreihe liefern können, ebenfalls mittels ω dargestellt werden. Terme, deren Wachstum
kleiner als jedes sind, leisten keinen Beitrag zur Potenzreihe
und werden vorerst als konstant betrachtet.
2.3 Bedingungen an das Wachstum
Sollte ω langsamer als exponentiell wachsen, kann es im Algorithmus zu Problemen kommen, die
zu unendlichen Rekursionen führen. Der Algorithmus gestaltet sich dagegen erheblich einfacher, wenn
angenommen werden kann, dass ω mindestens exponentielles Wachstum besitzt.
Abhilfe: Ersetzt man in f(x) jedes Vorkommen von x durch , ändert sich
der Grenzwert selbst nicht, nur das Wachstumsverhalten. Durch wiederholtes Ersetzen kann so jede Funktion
(innerhalb unserer Einschränkung der Funktionsvielfalt, siehe oben) derart verschärft werden, dass sie
mindestens exponentiell gegen Unendlich strebt.
Der Algorithmus soll später eine Potenzreihe in bilden. Damit das
funktioniert, muss auch der gewählte Teilausdruck ω für
gegen streben. Zum Glück ist
das kein kritisches Problem: Sollte gelten, kann statt dessen
verwendet werden. Der Fall
kann dank des Mindestwachstums zum Glück nicht mehr auftreten.
2.4 Ersetzung von Teilausdrücken
Beim Umschreiben der Funktion in eine Funktion in ω muss man sehr umsichtig vorgehen.
Es ist durchaus möglich, dass ein Teilausdruck der höchsten Wachstumsklasse selbst einen weiteren
Teilausdruck der selben Klasse beinhaltet. In dem Fall muss immer der größere Teilausdruck
vor den kleineren Teilausdrücken behandelt werden.
Kritisch sind auch die nötigen Umformungen. An manchen Stellen ist es wünschenswert, dass
Teilausdrücke nach dem Umschreiben vereinfacht werden, an anderen Stellen jedoch auch höchst
problematisch: Durch manche Umformungen können erneut Teilausdrücke mit höherer Wachstumsklasse
entstehen. Mathematicas fest eingebaute Funktion zur automatischen Vereinfachung wird sich dabei
als sehr problematisch erweisen.
2.5 Potenzreihenermittlung
Nach der Isolation des stärksten Wachstums in ω wird die Potenzreihe der Funktion ermittelt.
In Computeralgebra-Systemen wird üblicherweise die Potenzreihe durch konstruktive Verfahren aus der
Struktur der Funktion aufgebaut, und nicht klassisch durch die Definition der Taylorreihe. Um den
vollen Umfang der unterstützten Funktionen beizubehalten, ist eine Darstellung als Generalisierte
Potenzreihe (Generalized Power Series) erforderlich. Eine Generalisierte Potenzreihe ist eine
Potenzreihe der Form , wobei die
eine streng monoton wachsende Folge von reellen Zahlen bilden, und
für Funktionen ungleich der Nullfunktion gilt. Es dürfen also durchaus auch irrationale Exponenten
in der Potenzreihe auftreten.
Es existieren Algorithmen, die solche Potenzreihen als abgebrochene Potenzreihen mit Restterm
ermitteln können. Dabei sind die nur bis zu einem Summenindex n
bekannt, und der Algorithmus kann bei Bedarf diesen Abbruch-Index weiter hinaus schieben. Die
Unvollständigkeit der abgebrochenen Potenzreihe ist nicht kritisch, da der für die Analyse wichtige
Term der Potenzreihe sowieso der führende Term ist. Leider existiert
noch keine Implementierung eines solchen Algorithmus in Mathematica, so dass diese Diplomarbeit mit
den eingeschränkten Mitteln des Series-Kommandos von Mathematica auskommen muss.
2.6 Analyse des führenden Terms
Im Allgemeinen hat der führende Term die Gestalt , und
wächst dabei schwächer als jedes für .
Falls n sich als 0
ergibt, war die ursprüngliche Annahme, dass ω das Wachstum dominieren würde, falsch. Tatsächlich
hat sich in diesem Fall das Wachstum aller mit ω vergleichbaren Terme gegenseitig aufgehoben, und
der wirklich dominante Term ist in einer niedrigeren Wachstumsklasse zu finden. Durch die
Potenzreihenentwicklung wurde die Wachstumsklasse von ω eliminiert, und der gesuchte Grenzwert
kann nun durch weitere Analyse von gefunden werden.
Ist , ist das Ergebnis entweder 0 oder . Das Vorzeichen
kann durch weiteres Analysieren von gefunden werden.
Durch rekursives Abarbeiten wird so die Funktion jedes mal um eine Wachstumsklasse vereinfacht, bis
letztlich konstant ist. Zeichnet man diese Historie auf, gewinnt man einen guten
Einblick in die mit einander konkurrierenden Wachstumsprozesse und kann sogar eine Asymptote zur Funktion
bestimmen, die das Grenzverhalten der Funktion exakt nachbildet.
2.7 Null-Test
Im Verlauf des Algorithmus wird es wiederholt nötig sein, einen Term daraufhin zu überprüfen, ob
er Null ist, oder welches Vorzeichen er besitzt. So ist das Ermitteln des führenden Terms der
Potenzreihe zum Scheitern verurteilt, wenn die Funktion selbst die Null-Funktion ist: In diesem Fall
gibt es keine von Null verschiedenen Terme in der Potenzreihe. Es genügt sogar bereits, wenn die
Funktion in einer Umgebung um den Grenzübergangspunkt identisch der Nullfunktion ist.
Aber auch in anderen Teilen des Algorithmus treten solche Nulltests auf, z.B. beim Vergleichen des
Wachstumsverhaltens verschiedener Funktionen.
Auf den ersten Blick scheint es einfach zu sein, zu überprüfen, ob eine Funktion identisch Null ist.
In der Computeralgebra hat sich jedoch leider herausgestellt, dass dies ein sehr schwieriges, wenn
nicht gar unlösbares Problem ist. [Har10] und [Sha04] beschäftigen sich
eingehender mit dem Thema.
So ist zum Beispiel in unserem eingeschränkten Funktionsraum ein zweifelsfreier
Nulltest theoretisch machbar: Es existieren Abschätzungen, wie viele Nullstellen eine solche Funktion
maximal haben kann. (vgl. [Ric69] und [Mac80])
Findet man mehr Nullstellen, muss die Funktion insgesamt identisch Null sein.
Leider ist der Aufwand zur Ermittlung dieser Abschätzung sehr groß, und auch die Anzahl der zu
überprüfenden Nullstellen ist meist so groß, das das Verfahren in der Praxis zu langsam ist.
In dieser Diplomarbeit ist es daher auch wieder einfachen Mathematica-Abfragen überlassen,
die Frage des Nulltests zu beantworten. Eine gewisse Fehlerwahrscheinlichkeit muss hier wieder in Kauf
genommen werden.
2.8 Rekursionen
Auf dem Weg zur Berechnung des Grenzwerts wird es immer wieder erforderlich sein, andere
Grenzwerte ebenfalls zu berechnen. Solche Grenzwertberechnungen sind z.B. nötig, wenn das
Wachstumsverhalten von Termen analysiert wird. In solchen Situationen wird sich der
MrvLimit-Algorithmus selbst rekursiv aufrufen. Dabei muss sorgfältig darauf geachtet werden,
dass die rekursiv berechneten Grenzwertaufgaben immer einfacherer Natur sind, als der eigentlich
zu berechnende Grenzwert. Andernfalls würde sich der Algorithmus immer wieder mit immer
schwierigeren Problemen selbst aufrufen und niemals ein Ergebnis liefern. Solange aber die
Grenzwertaufgaben zunehmend einfacher werden, wird der Algorithmus irgendwann bei den einfachsten
Aufgaben ankommen und die Grenzwerte von x oder von Konstanten berechnen - dessen Lösungen
direkt fest in den Algorithmus integriert werden können.
Zurück - Inhalt - Übersicht - Vorwärts