Seite 1 von 1
Summenzeichen
Verfasst: Samstag 11. September 2010, 20:18
von mifo
Hallo liebe Python-Gemeinde,
ich habe vor einiger Zeit mit Python angefangen und bin nun dabei
Pi mit den Gauß-Algorithmus zu berechnen. Das ganze scheitert leider
daran, dass ich nicht weiß wie ich in Python Summenzeichen benutze.
Ich hoffe, dass ich nichts offensichtliches übersehe und euch mit so etwas
nerve.
Vielen Dank im vorraus,
mifo
Re: Summenzeichen
Verfasst: Samstag 11. September 2010, 20:28
von cofi
Gar nicht. Du musst das Summenzeichen "ausrollen":
Σ_{i=0}^{20} wird zu
Re: Summenzeichen
Verfasst: Samstag 11. September 2010, 20:39
von mifo
Vielen Dank. Könntest du mir den Aufbau bitte noch etwas genauer
erklären?
Wie kommst du in dem Fall auf die 21?
Re: Summenzeichen
Verfasst: Samstag 11. September 2010, 20:50
von cofi
In der Summenzeichennotation sind sowohl das untere, als auch das obere Ende inklusive, bei `range` nur das untere (in dem Fall die implizite 0) das obere Ende ist exklusiv, d.h. du musst 1 hinzuzaehlen.
Direkt ein Tipp: Wenn dir etwas unklar ist, probier es doch selbst im Interpreter!
Re: Summenzeichen
Verfasst: Samstag 11. September 2010, 22:15
von mifo
Hey,
tut mir Leid, dass ich mich so blöd anstelle aber ich steige da immer
noch nicht durch. Ich zeige dir mal meinen bisherigen Code, vielleicht
kannst du mir das anhand dieses Beispiels besser erläutern.
Code: Alles auswählen
# Programm zur Berechnung von Pi durch
# den Gauß'schen Algorithmus
import math
n = input()
nintegerwurzel = int(math.sqrt(n))
halbnint = int(math.sqrt(n/2))
Algorithmus = 1 + 4 * nintegerwurzel + 4 * halbnint ** 2 + 8 * Summe von halbnint + 1 bis nintegerwurzel über Integer-Wurzel aus N - halbnint + 1 ** 2
Vielen Dank,
mifo
Re: Summenzeichen
Verfasst: Sonntag 12. September 2010, 00:13
von Darii
mifo hat geschrieben:ich habe vor einiger Zeit mit Python angefangen und bin nun dabei
Pi mit den Gauß-Algorithmus zu berechnen. Das ganze scheitert leider
daran, dass ich nicht weiß wie ich in Python Summenzeichen benutze.
Du musst die einzelnen Summanden einzeln ausrechnen und addieren, beispielsweise mit einer for-Schleife.
z.B. \sum_{i=1}^{20} \frac{1}{n^2} wird zu
Code: Alles auswählen
from __future__ import division # nötig, da sonst Integer-Division bei ganzen Zahlen, schreibs einfach unreflektiert in jede Datei rein wenn du was ausrechnen willst und Python 2.x verwendest
summe = 0
for i in range(1, 20 + 1): # iteriert über die ganzen Zahlen von 1 bis 20
summe += 1/i**2
print summe
PS: Ich kenne die Formel die du verwendest nichst und ich steige auch nicht durch deine Nomenklatur durch, aber bist du dir sicher, dass du die abgerundeten ganzzahligen Werte benötigst?
Re: Summenzeichen
Verfasst: Sonntag 12. September 2010, 07:21
von numerix
Ich kenne diese "Formel von Gauß" auch nicht, aber habe erhebliche Zweifel daran, dass das in der gezeigten Form richtig ist. Am einfachsten wird es sein, wenn du mal die Quelle nennst oder die Originalformel postest.
Im übrigen findest du hier im Forum mehrere Threads, die sich mit der Berechnung von pi beschäftigen. Das Problem scheint jedoch zu sein, dass man diese Beiträge über die Suchfunktion schwer finden kann, weil Wörter, die aus weniger als 3 Buchstaben bestehen, bei der Suche ignoriert werden ...
Re: Summenzeichen
Verfasst: Sonntag 12. September 2010, 12:21
von mifo
Guten Morgen,
Ich habe die Formel von einem Mathe-Arbeitsblatt. Ich hab das ganze mal
fotografiert und die entsprechenden Formeln makiert.
http://www.abload.de/image.php?img=dsc064001ve7.jpg
Viele Grüße
mifo
Re: Summenzeichen
Verfasst: Sonntag 12. September 2010, 13:21
von numerix
Code: Alles auswählen
def gauss_pi(n):
b, a = int(n**.5), int((.5*n)**.5)
return (1+4*b+4*a*a+8*sum(int((n-i*i)**.5) for i in xrange(a+1,b+1)))/float(n)
print gauss_pi(10**12)
Liefert:
Ob der Einsatz von sum() hier eine gute Wahl ist, darüber mag man streiten. Ich würde wohl eher mit einer expliziten Schleife arbeiten. Das kannst du ja als Übung mal machen.
Re: Summenzeichen
Verfasst: Sonntag 12. September 2010, 13:43
von mifo
Hey,
vielen Dank an euch alle

Den Code von dir, numerix, finde ich
super, da er wie ich finde sehr elegant ist. Ich werde mich demnächst
nochmal an eine Version mit einer Schleife setzen und diese bei den Code-Schnipseln
hochladen.
Schönen Tag euch alle,
mifo