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

Code: Alles auswählen

sum(range(21))

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?

Code: Alles auswählen

sum(range(21))
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:

Code: Alles auswählen

3.14159264963
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