3) Einige Beispiele aus Uebung 12 ========================== Konvergenzradius einer Potenzreihe: ______________________________ Ue 12, A 1: Man bestimme den Konvergenzradius von (i) sum(a^n!*z^n,n = 0 .. infinity); fuer a <> 0;, a; reell. (ii) sum((-1)^n*z^n/(2^(n+1)),n = 0 .. infinity); (iii) sum((1+1/n)^(n^2)*z^n,n = 1 .. infinity); Cauchy-Hadamard-Formel fuer Konvergenzradius rho; der Potenzreihe sum(a[n]*z^n,n = 0 .. infinity); : > rho = 1/limit(abs(a[n])^(1/n),n = infinity); , falls der Grenzwert existiert. Eine andere Formel: > rho = limit(abs(a[n]/a[n+1]),n = infinity); , falls der Grenzwert existiert. ============================================ Wir beginnen mit Teil (ii), weil Teil (i) eine zusaetzliche Schwierigkeit enthaelt. Zu (ii): Hier ist a[n] = (-1)^n/(2^(n+1)); > 1/limit(abs((-1)^n/(2^(n+1)))^(1/n),n=infinity); > limit(abs((-1)^n/2^(n+1)/(-1)^(n+1)*2^(n+2)),n=infinity); Zusatzaufgabe: Man kann testen, ob die Reihe (ii) fuer bestimmte z konvergiert: Innerhalb des Konvergenzkreises: > z:=1;sum((-1)^n*z^n/(2^(n+1)),n = 0 .. infinity); > z:=3/2;sum((-1)^n*z^n/(2^(n+1)),n = 0 .. infinity); > z:=1.99;sum((-1)^n*z^n/(2^(n+1)),n = 0 .. infinity); Auf dem Rand des Konvergenzkreises: > z:=2;sum((-1)^n*z^n/(2^(n+1)),n = 0 .. infinity); > z:=-2;sum((-1)^n*z^n/(2^(n+1)),n = 0 .. infinity); Ausserhalb des Konvergenzkreises: > z:=3;sum((-1)^n*z^n/(2^(n+1)),n = 0 .. infinity); > z:=-3;sum((-1)^n*z^n/(2^(n+1)),n = 0 .. infinity); ---------------------------------------------------------------- Erklaerung:(erweiterte Fassung) Erinnere an die Definition des Konvergenzkreises: der groesste Kreis um Null mit der Eigenschaft, dass die Reihe in seinem Inneren ueberall konvergiert. Also genuegt eine "Singularitaet" auf dem Rand, um zu verhindern, dass der Konvergenzradius groesser gewaehlt werden koennte. Unter "Singularitaet" ist zu verstehen: eine Stelle, an der die Funktion, deren Potenzreihenentwicklung durch sum((-1)^n*z^n/(2^(n+1)),n = 0 .. infinity); gegeben ist, nicht (komplex) differenzierbar ist. Eine Singularitaet liegt bei z=-2, wie wir oben gesehen haben. In allen anderen Randpunkten liegt keine Singularitaet. Das kann man sehen, indem man Maple die betreffende Funktion berechnen laesst: > Sum((-1)^n*z^n/(2^(n+1)),n = 0 .. infinity)=sum((-1)^n*z^n/(2^(n+1)),n = 0 .. infinity); Diese Funktion ist in der komplexen Ebene ueberall differenzierbar mit Ausnahme eines einzigen Punktes: z=-2 . Nach Satz IV.4.5 der Vorlesung divergiert die gegebene Reihe fuer 2 < abs(z); . Maple benutzt nun einen Satz aus der Analysis IV ueber die Entwickelbarkeit von Funktionen einer komplexen Veraenderlichen in eine Potenzreihe, um auch im Falle 2 < abs(z); der Reihe einen Wert zuzuordnen: Der Satz sagt aus: Wenn man dieselbe Funktion f(z) = 1/(z+2); um einem anderen Punkt w; entwickelt, ergibt sich als Konvergenzkreis der neuen Entwicklung wieder der groesste Kreis um w;, der den singulaeren Punkt z = -2; nicht enthaelt. Man kann also die Funktion 1/(z+2) etwa um w=1 entwickeln. Die entstehende Reihe sieht dann natuerlich anders aus. Deren Konvergenzradius wird gleich dem Abstand der Punkte z=1 und z=-2 sein, also gleich 3. Die neue Reihe konvergiert also im Inneren des Kreises um 1 mit Radius 3 in der komplexen Ebene, insbesondere fuer z=3. Der Grenzwert ist dort wieder gleich f(z)=1/(z+2). Was Maple als Ergebnis bei z=3 lieferte, ist genau dieser Wert: f(3)=1/(3+2). ======================================================= Zu (iii): Hier ist a[n] = (1+1/n)^(n^2); > 1/limit(((1+1/n)^(n^2))^(1/n),n=infinity); > limit((1+1/n)^(n^2)/(1+1/(n+1))^((n+1)^2),n=infinity); Zusatzaufgabe: Auch hier ein Test mit Werten von z innerhalb des Konvergenzkreises: > exp(1);evalf(1/exp(1)); Vorsicht: Der Wert von z ist oben festgelegt worden: > z; > z:=1/3;sum((1+1/n)^(n^2)*z^n,n=1..infinity); > evalf(%); > sum((1+1/n)^(n^2)*z^n,n=1..m); Die folgenden vier Befehlszeilen sind durch "#" auskommentiert, damit sie nicht versehentlich aktiviert werden: > #m:=100; sum((1+1/n)^(n^2)*z^n,n=1..m); > #kernelopts(cputime); > #%/60; -->> 2 Std 15 Min.! (Prozessor Pentium 133 MHz) Der Rechner reagiert waehrend dieser Zeit evtl. nicht auf das Stopsignal. Das Ergebnis ist ein Bruch aus zwei ganzen Zahlen mit je etwa 12 000 Stellen. Der numerische Wert ist > #convert(%%%,float); Dies ist ein praktisches Beispiel fuer "langsame Konvergenz". Ausweg, um zu hoeheren Werten von m zu gelangen: Benutze Maple fuer die Analyse des Problems: Wie kommt der obige Monsterbruch zustande? Berechne den 100-sten Term alleine, sehe das Ergebnis vorsichtshalber nicht an! (Doppelpunkt) > m:=100:(1+1/m)^(m^2)*z^m: > whattype(%); > convert(numer(%%),float); > convert(denom(%%%),float); -->> Das Ergebnis ist ein Bruch aus zwei ganzen Zahlen von mehr als 20000 Stellen! Man sollte versuchen, Maple die einzelnen Terme der Summe nicht als Brueche sondern als Dezimalzahlen berechnen zu lassen. Dazu gibt es zwei Befehle: "Evalf" und "evalhf". Der Befehl > #m:=100; sum(evalf((1+1/n)^(n^2)*z^n),n=1..m); ist zwar schneller, aber fuer m=100 immer noch nicht schnell genug (ca.30 Min. auf einem schnellen Rechner). Der Befehl "evalhf" bringt oft eine grossen Geschwindigkeitsvorteil, aber er ist hier nicht anwendbar: > m:=20; sum(evalhf((1+1/n)^(n^2)*z^n),n=1..m); -->> Ersetze "sum" durch "add". > ?add > add(2^n,n=1..j); > add(b^n,n=1..5); Der Befehl "add" kann zwar nur Summen mit Zahlenwerten als obere und untere Grenzen behandeln, aber er vermeidet es, mit dem unausgewerteten Laufparameter "n" zu arbeiten. Deshalb ist es moeglich, die Einzelterme mit "evalhf" in Dezimalzahlen zu verwandeln: > m:=20; add(evalhf((1+1/n)^(n^2)*z^n),n=1..m); > m:=60; add(evalhf((1+1/n)^(n^2)*z^n),n=1..m); > m:=100; add(evalhf((1+1/n)^(n^2)*z^n),n=1..m); Die naechsten Schritte mit Zeitnahme: Der Befehl "time()" ergibt den derzeitigen Wert der cpu-Zeit in Sekunden, gezaehlt ab dem Start des fuer dieses Worksheet zustaendigen Maple-Kerns: > time(); Die Laufzeit eines einzelnen Befehls kann man so feststellen: > m:=200; cpu_time:=time();add(evalhf((1+1/n)^(n^2)*z^n),n=1..m);Laufzeit=(time()-cpu_time)*Sekunden; > m:=1000; cpu_time:=time():add(evalhf((1+1/n)^(n^2)*z^n),n=1..m);Laufzeit=(time()-cpu_time)/60*Minuten; > m:=600; cpu_time:=time():add(evalhf((1+1/n)^(n^2)*z^n),n=1..m);Laufzeit=(time()-cpu_time)/60*Minuten; Der Vergleich der Ergebnisse fuer m=200, m=600 laesst erwarten, dass die Reihe konvergiert. ======================================================== Empfehlung: Man sollte sich angewoehnen, Wertzuweisungen am Ende zu loeschen, um vor Ueberraschungen sicher zu sein. Das geht spezifisch mit > z:='z'; oder global mit > restart; ======================================================== Zu (i): Wir versuchen, den Konvergenzradius zu bestimmen. Hier ist > a[n] = a^n!; . > 1/limit(abs(a^(n!))^(1/n),n = infinity); > limit(abs(a^(n!)/a^((n+1)!)),n = infinity); Die Schwierigkeit besteht darin, dass die Aufgabe eine unbekannte Groesse "a" enthaelt. Maple braucht die Information, dass a; reell und a <> 0; ist. Dazu gibt es den Befehl "assume". > ?assume > assume(a,real); > additionally(a<>0); > about(a); > a; > 1/limit(abs(a^(n!))^(1/n),n = infinity); > limit(abs(a^(n!)/a^((n+1)!)),n = infinity); > a:='a'; > about(a); > assume(a>0);1/limit(abs(a^(n!))^(1/n),n = infinity); > limit(abs(a^(n!)/a^((n+1)!)),n = infinity); Wie ist die Aufgabenstellung zu verstehen? "Fuer welche reellen a <> 0; konvergiert die Reihe und wie gross ist ihr Konvergenzradius?" Offensichtlich ist der Konvergenzradius Null, wenn 1 < abs(a); ist! > about(a); > a:='a'; > assume(0 additionally(a<1); > about(a); > 1/limit(abs(a^(n!))^(1/n),n = infinity); > limit(abs(a^(n!)/a^((n+1)!)),n = infinity); -->Konvergenzradius infinity;, falls a; echt zwischen 0 und 1 liegt > a:='a'; > a:=1;1/limit(abs(a^(n!))^(1/n),n = infinity); -->Konvergenzradius 1 , falls a = 1;. > a:='a'; > assume(a>1); > about(a); > limit(abs(a^(n!)/a^((n+1)!)),n = infinity); > limit(abs(a^(n!))^(1/n),n = infinity); -->Konvergenzradius 0 , falls 1 < a;. ===================================================== Fazit: Es kann i.a. nicht erwartet werden, dass Maple von sich aus auf notwendige Fallunterscheidungen hinweist! Man kann Maple jedoch als geduldiges Arbeitstier gebrauchen: > a:='a'; > a:=1/4;z:=1;sum(a^n!*z^n,n = 0 .. infinity); > add(evalhf(a^n!*z^n),n = 0 .. 100); > add(evalhf(a^n!*z^n),n = 0 .. 1000); > a:=1/4;z:=10;add(evalhf(a^n!*z^n),n = 0 .. 1000); > a:=1/4;z:=10;add(evalhf(a^n!*z^n),n = 0 .. 100); > a:=1/4;z:=10;add(evalhf(a^n!*z^n),n = 0 .. 200); --> Konvergenzradius unendlich > a:=1;z:=1/2;add(evalhf(a^n!*z^n),n = 0 .. 100); > a:=1;z:=1/2;add(evalhf(a^n!*z^n),n = 0 .. 200); > a:=1;z:=0.9;add(evalhf(a^n!*z^n),n = 0 .. 100); > a:=1;z:=0.9;add(evalhf(a^n!*z^n),n = 0 .. 200); > a:=1;z:=1.1;add(evalhf(a^n!*z^n),n = 0 .. 100); > a:=1;z:=1.1;add(evalhf(a^n!*z^n),n = 0 .. 200); --> Konvergenzradius 1 > a:=2;z:=1/10;add(evalhf(a^n!*z^n),n = 0 .. 100); > a:=2;z:=1/10;add(evalhf(a^n!*z^n),n = 0 .. 10); > a:=2;z:=1/10;add(evalhf(a^n!*z^n),n = 0 .. 5); > a:=2;z:=1/10;add(evalhf(a^n!*z^n),n = 0 .. 6); -->> Konvergenzradius 0.