1. Die ersten hundert natürlichen Zahlen
2. Summen von Quadrat- und Kubikzahlen
3. Summen höherer Potenzen
Diese Präsentation führt Sie – ausgehend von einer berühmten Anekdote – in die Verwendung des Summenzeichens ein und zeigt exemplarisch, wie die spielerische Beschäftigung mit Spezialfällen zu allgemeinen Erkenntnissen führen kann.
Carl Friedrich Gauß wurde 1786 in der Volksschule als Beschäftigung die Aufgabe gestellt, die Zahlen von 1 bis 100 zu addieren. Gauß hat diese Aufgabe mit einem einfachen Trick in kürzester Zeit gelöst.
Heute können wir natürlich den Computer solche Summen berechen lassen. Der schafft das auch auf die „Ochsentour“ in praktisch nicht wahrnehmbarer Zeit. Dieser Komfort kann uns aber leider auch von der Entwicklung einer effizienten Lösung abhalten, ohne die auch der schnellste Computer scheitert, wenn wir z.B. nicht die Summe von 1 bis 100 sondern bis 10100 benötigen.
Die gesuchte Summe ist
Statt der Laufvariablen i kann rechts auch ein beliebiger Term stehen, der jeweils in Abhängigkeit von i berechnet wird:
Die Bedeutung einer solchen Summe könnte man in mathGUIde allgemein so definieren:
def sigma(n0, n1, f): sum = 0 # anfangs leere Summe i = n0 # i auf Startwert setzen while i <= n1: # solange i den Endwert nicht überschreitet... sum += f(i) # ...die Summe um f(i) erhöhen i += 1 # ...und i um eins erhöhen return sum
Wieso kommt in der Parameterliste
der Funktion sigma
die Variable i nicht vor?
Das hat einen guten Grund: i dient ja nur als Hilfsvariable für das Durchzählen
der in die Summe einzusetzenden Werte. Man könnte dafür auch eine beliebige andere
Variable nehmen, ohne den Wert der Summe zu verändern. In der Implementierung haben
wir dafür eine lokale Variable i
verwendet.
In unserem Beispiel ist f(i) = i, n0 = 1 und n1 = 100.
Damit können wir die gesuchte Summe so berechnen:
def f(i): return i sigma(1, 100, f)
Mit Hilfe des Python-Schlüsselworts lambda
kann man sich die
Definition einer benannten Funktion sparen und direkt eine anonyme Funktion
einsetzen:
sigma(1, 100, lambda i:i)
Bitte prüfen Sie Ihr Verständnis des Summenzeichens an den folgenden Beispielen:
Bevor Sie mathGUIde die Lösungen anzeigen lassen,
versuchen Sie es bitte erst selbst!
Als Gedächtnisstütze können Sie die Definition der Funktion
sigma
noch einmal ins Eingabefenster
kopieren.
sigma( 2, 4, lambda i: i^2) sigma(-1, 1, lambda k: k^4) sigma( 1, 10, lambda i: 3) sigma( 1, 0, lambda i: i+5)
Natürlich hat Gauß nicht alle 100 Zahlen einzeln addiert, sondern sich folgendes überlegt:
Schreibt man die Summe einmal vorwärts und einmal rückwärts,
so ergeben die übereinanderstehenden Zahlen jeweils 101.
Die doppelte Summe ist also 100·101 = 10100 und damit die einfache Summe 5050.
Für allgemeinere Summen von 1 bis n ergibt sich ebenso:
Zur Belohnung für unser Nachdenken rechnet mathGUIde uns jetzt mal eben die Summe
der natürlichen Zahlen bis 10100 aus.
Der Operator //
steht für ganzzahlige Division:
n = 10^100 print(n*(n+1) // 2)
Fortsetzung: Summen von Quadratzahlen