10 Reihen
In diesem Kapitel lernen Sie, wie Sie Reihen als Funktionsplots und Wertetabellen darstellen können. Reihen werden auf Konvergenz überprüft, und es werden deren Grenzwerte berechnet. Durch Visualisierung eines Taylor-Polynoms wird die Genauigkeit der Approximation veranschaulicht.
Wenn Sie die einzelnen Glieder einer Folge aufsummieren, erhalten Sie eine Reihe. Weil der Prozess des Aufsummierens der Folgenglieder theoretisch bis ins Unendliche fortgesetzt werden kann, spricht die Mathematik auch von unendlichen Reihen.
Konvergente Reihen mit unendlich vielen Gliedern haben einen endlichen Wert (= Summe der Folgenglieder). Diese Paradoxie ist auf den ersten Blick schwer verständlich und soll deshalb im Laufe der Untersuchung aufgelöst werden. Ich möchte sie aber bereits anhand eines Beispiels erklären: Wenn Sie eine Torte in zwei Hälften teilen und eine Hälfte immer wieder teilen, dann kann sich theoretisch die Anzahl der Stücke bis ins Unendliche vermehren. Der Inhalt der Kreisfläche ändert sich aber nicht.
Bei der Berechnung der Summe einer konvergenten Reihe handelt es sich um einen Grenzwertprozess. Die Summe nähert sich für n gegen unendlich einem bestimmen Wert, dem Grenzwert.
Reihen sind in der Mathematik ein wichtiges Hilfsmittel, um Berechnungen näherungsweise durchzuführen. Trigonometrische und hyperbolische Funktionswerte einschließlich ihrer Umkehrfunktionen sowie die Kreiszahl π und die eulersche Zahl e werden mithilfe von Reihen berechnet.
Reihe
Eine Reihe ist ein Objekt aus dem mathematischen Teilgebiet der Analysis. Sie wird durch das Aufsummieren (unendlich) vieler Folgenglieder gebildet. Präzise wird eine Reihe als eine Folge definiert, deren Glieder die Partialsummen einer anderen Folge sind.
Reihen können ebenso wie Folgen konvergieren oder divergieren – falls Sie die Begriffe nicht mehr genau kennen, schlagen Sie in Kapitel 7, »Folgen«, nach. Ob sie konvergieren oder divergieren, kann beispielsweise mit dem Quotienten- oder Wurzelkriterium untersucht werden. Eine notwendige Bedingung für Konvergenz ist außerdem, dass die Glieder einer Reihe eine Nullfolge bilden. Mit SymPy können Sie diese Kriterien anwenden und sogar unendliche Summen und Grenzwerte von Reihen symbolisch berechnen.
10.1 Divergierende Reihen
Es gibt Reihen, die offensichtlich divergieren. Dazu zählen die Reihen vom Typ ∑k und ∑k2. Die Summen ihrer Folgenglieder gehen für eine große Anzahl von Gliedern gegen unendlich. Dass auch die harmonische Reihe

divergiert, würde man auf den ersten Blick nicht vermuten, denn die harmonische Folge 1/n konvergiert (siehe Listing 10.4).
Mit den SymPy-Methoden Sum() und limit() können Summen und Grenzwerte von Reihen symbolisch berechnet werden. Für das Symbol ∞ verwendet SymPy den kleinen Buchstaben o. Er wird zweimal hintereinander eingetippt: oo.
10.1.1 Die Reihe der Quadratzahlen
Betrachten wir zunächst am Beispiel der Quadratzahlen die Eigenschaft der Divergenz.
Abbildung 10.1 Aufsummierung von Quadraten
Aus der Folge der Quadratzahlen

entsteht durch Addition der einzelnen Folgenglieder die Reihe der Quadratzahlen:

Für n Summanden kann mit

die Partialsumme allgemein berechnet werden. Eine Herleitung dieser Formel finden Sie im Internet unter der Bezeichnung quadratische Pyramidenzahlen:
https://de.wikipedia.org/wiki/Quadratische_Pyramidalzahl
Für die Partialsumme der Quadratzahlen gibt es sogar eine geschlossene Formel. Man kann diese Formel auch mithilfe der SymPy-Methode Sum() symbolisch berechnen (siehe Listing 10.4). In Tabelle 10.1 sind die Werte der Quadratzahlen und die Partialsummen der Quadratzahlen aufgelistet. Die Summe der Quadratzahlen bezeichnet man auch als den Wert der Reihe.
k |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
k2 |
1 |
4 |
9 |
16 |
25 |
36 |
49 |
64 |
81 |
100 |
∑k2 |
1 |
5 |
14 |
30 |
55 |
91 |
140 |
204 |
285 |
385 |
Tabelle 10.1 Wertetabelle für die Folge und die Reihe der Quadratzahlen
In der ersten Zeile der Tabelle steht der Laufparameter (Laufzahl) k = 1 bis 10 der Reihe. In der zweiten Zeile steht die Folge der Quadratzahlen. In der dritten Zeile stehen die Partialsummen der Folgenglieder. Abbildung 10.2 stellt die Folge (×) und die Reihe (+) der Quadratzahlen als Funktionsplot dar.
Mit Listing 10.1 können Sie den Funktionsplot der Folgen- und Reihendarstellung aus Abbildung 10.2 erstellen.
01 #01_plot_divergenz.py
02 import matplotlib.pyplot as plt
03 summe=0
04 fig, ax = plt.subplots()
05 for k in range(1,11):
06 summe=summe + k**2
07 ax.scatter(k,k**2,marker='x',color='b')
08 ax.scatter(k,summe,marker='+',color='r')
09 #Beschriftungen
10 ax.set_title(r'$\sum^{n}_{k=1} k^{2}$')
11 ax.set(xlabel='k',ylabel=r'$k^{2},\ \sum^{}_{} k^{2}$')
12 ax.text(8,35,"Folge",fontsize=12)
13 ax.text(8,300,"Reihe",fontsize=12)
14 plt.show()
Listing 10.1 Funktionsplot für die Folge und Reihe der Quadratzahlen
Abbildung 10.2 Funktionsplot für die Folge (×) und die Reihe (+) der Quadratzahlen
Analyse
Die Zeile 06 berechnet mit dem Summenalgorithmus die Partialsummen der Quadratzahlen. In Zeile 07 wird die Folge der Quadratzahlen als x-Zeichen ausgegeben, und in Zeile 08 wird die Reihe der Quadratzahlen als +-Zeichen ausgegeben. Beide Ausgaberoutinen benutzen für die Bildschirmausgabe die scatter-Methode des Untermoduls pyplot von matplotlib.
Mit einem Funktionsplot lässt sich der Unterschied zwischen einer Folge und einer Reihe leicht veranschaulichen. Eine Wertetabelle verdeutlicht diesen Unterschied noch präziser. Listing 10.2 berechnet die Wertetabelle für die Folge und Reihe der Quadratzahlen:
01 #02_divergenz1.py
02 n=10
03 summe=0
04 print("k^2 \t ∑k^2 ")
05 for k in range(1,n+1):
06 summe=summe + k**2
07 print(k**2,"\t",summe)
Listing 10.2 Berechnung der Wertetabelle für die Folge und Reihe der Quadratzahlen
Ausgabe
k^2 ∑k^2
1 1
4 5
9 14
16 30
25 55
36 91
49 140
64 204
81 285
100 385
Analyse
In Zeile 06 wird wieder der Summenalgorithmus benutzt, um die Reihe der Quadratzahlen zu berechnen. Die Ausgabe erfolgt innerhalb des Schleifenrumpfs in Zeile 07. In der ersten Spalte der Ausgabe steht die Folge der Quadratzahlen, und in der zweiten Spalte stehen die Glieder der Reihe der Quadratzahlen. Die Summe eines Reihengliedes kann aus einem Glied der ersten Spalte und dem Glied seines Vorgängers aus der zweiten Spalte berechnet werden.
10.1.2 Harmonische Reihe
Da wir schon wissen, dass die harmonische Folge 1/n konvergiert, liegt die Vermutung nahe, dass auch die harmonische Reihe konvergiert. Dass das nicht der Fall ist, bewies bereits 1350 der Theologe und Mathematiker Nikolaus von Oresme (ca. 1320–1382) [Walter: 80, Weitz: 532].
Mit dem Computer wollen wir nun zunächst experimentell untersuchen, ob die harmonische Reihe divergiert. Listing 10.3 zeigt eine mögliche Umsetzung:
01 #03_divergenz2.py
02 i=9 #Exponent
03 print("n\t∑1/n")
04 for i in range(1,i):
05 summe=0
06 for n in range(1,10**i+1):
07 summe=summe + 1/n
08 print("%9d %4.10f" %(n,summe))
Listing 10.3 Partialsummen der harmonischen Reihe
Ausgabe
n ∑1/n
10 2.9289682540
100 5.1873775176
1000 7.4854708606
10000 9.7876060360
100000 12.0901461299
1000000 14.3927267229
10000000 16.6953113659
100000000 18.9978964139
Analyse
Für eine obere Grenze von n = 106 ergibt sich für die harmonische Reihe eine Summe von etwa 14,39. Auch wenn man für die obere Grenze sehr große Zahlen einsetzt, lässt sich mit dem Summenalgorithmus nicht nachweisen, dass die harmonische Reihe divergiert. Mit dieser experimentellen Methode kommen wir also nicht zum Ziel. Dass die harmonische Reihe divergiert, scheint der menschlichen Intuition zu widersprechen. Doch Nikolaus von Oresme wies mit dem heute noch gültigen Gedankengang



nach, dass die harmonische Reihe divergiert [Walter: 80]. Es ist also ratsam, SymPy für die symbolische Berechnung des Grenzwertes heranzuziehen.
Listing 10.4 berechnet mit der SymPy-Methode Sum() den Wert der harmonischen Reihe ∑1/n symbolisch für und zum Vergleich die Partialsumme der Reihe der Quadratzahlen ∑n2 für die obere Grenze n. Das Symbol für ∞ wird von SymPy durch zwei direkt aufeinanderfolgende Kleinbuchstaben oo repräsentiert.
01 #04_sum_divergenz.py
02 from sympy import *
03 n=symbols('n')
04 an=1/n #harmonische Folge
05 bn=n**2 #Folge der Quadratzahlen
06 S_an=Sum(an,(n, 1,oo)).doit()
07 S_bn=Sum(bn,(n, 1,n)).doit()
08 print("Summe der harmonischen Reihe..:",S_an)
09 print("Partialsumme der Quadratzahlen:",S_bn)
10 print("vereinfachte Summenformel.....:",simplify(S_bn))
Listing 10.4 Summen der harmonischen Reihe und der Reihe der Quadratzahlen
Ausgabe
Summe der harmonischen Reihe..: oo
Partialsumme der Quadratzahlen: n**3/3 + n**2/2 + n/6
vereinfachte Summenformel.....: n*(2*n**2 + 3*n + 1)/6
Analyse
In Zeile 04 wird die harmonische Folge an und in Zeile 05 wird die Folge der Quadratzahlen bn definiert. In Zeile 06 berechnet die SymPy-Methode Sum(an,(n, 1,oo)). doit() die Summe der harmonischen Folge für . Erwartungsgemäß wird auch oo (das SymPy-Symbol für unendlich) ausgegeben (Zeile 08). Wenn Sum() ohne die Methode doit() ausgeführt wird, dann wertet sie die Summe nicht aus, sondern gibt nur die nicht ausgewertete Summe Sum(1/n, (n, 1, oo)) zurück. Erst mit der Methode doit() wird die Summe symbolisch berechnet. Die Methode doit() aus Zeile 06 könnte auch in Zeile 08 stehen: S_an.doit().
In Zeile 07 wird die Partialsumme der Quadratzahlen für die obere Grenze n berechnet und mit print() in den Zeilen 09 und 10 ausgegeben. Die SymPy-Methode simplify() in Zeile 10 vereinfacht die Summenformel der Quadratzahlen.