MonteCarlo Simulation zur Approximation von pi
Verfasst: Mittwoch 10. Juni 2009, 17:45
Hallo zusammen,
schon wieder ich.
Diesmal habe ich mit einen Mitstudenten zu der Aufgabe:
Einem Kreis mit Radius 1 sei ein Quadrat dicht umschrieben: ‚Dart-Scheibe‘.
• Simulieren Sie zufällige Würfe auf die Dart-Scheibe.
• Zählen Sie die Treffer (im Kreis).
• Berechnen Sie 4 · (Treffer/Würfe).
• Vergleichen Sie mit π
folgendes Programm geschrieben:
Was bedeutet nochmal die Funktion _main_?
Ich wollte nun fragen, ob meine Kommentare richtig sind und ob es noch verbesserungsvorschläge gibt.
So langsam bekomme ich gefallen an Python.
schon wieder ich.

Diesmal habe ich mit einen Mitstudenten zu der Aufgabe:
Einem Kreis mit Radius 1 sei ein Quadrat dicht umschrieben: ‚Dart-Scheibe‘.
• Simulieren Sie zufällige Würfe auf die Dart-Scheibe.
• Zählen Sie die Treffer (im Kreis).
• Berechnen Sie 4 · (Treffer/Würfe).
• Vergleichen Sie mit π
folgendes Programm geschrieben:
Code: Alles auswählen
def montecarlo(N): # Funktion wird definiert
"""Auf einen Kreis in einem 1*1 großen Quadrat werden N Wuerfe simuliert.
Sie liefert die durchschnittlichen Treffer * 4 zurueck. """
from random import random # implementiert Zufallszahlen
wuerfe, treffer = 0, 0 # bei 0 Wuerfe und Treffer wird begonnen
while wuerfe<N: # Anweisungsblock wird solange wiederholt, bis die Bedingung
# eingetroffen ist (bis
# x und y sind die Koordinaten des geworfenen Pfeils
# random liefert die Werte zwischen 0 und 1, zufällig
x, y = random(), random()
if (x**2+y**2)**0.5 < 1: # euklidische Abstand vom Nullpnkt wird
# definiert, wenn die berechneten Abstand
# kleiner 1 sind, dann wurde der Kreis getroffen
treffer+=1
wuerfe+=1
return 4.*treffer/wuerfe # 4 mal werden de Treffer und Wuerfe berechnet
if __name__=='__main__':
from math import pi # implementiert von math pi
# Der versuch wird mit immer groesseren Anzahlen von Würfen wiederholt
#und dann wird der Betrag des jeweiligen Abstandes zum bekannten pi berechnet
for N in [1,10,100,1000,10000,100000,1000000]: # Anzahl von Wuerfen wird angegeben
abweichung = abs(montecarlo(N)-pi) # liefert den absoluten Wert von x
# (Abstand zwischen zwischen x und Null)
print "Nach %d Wuerfen betrug die Abweichung zu pi: %f" %(N,abweichung)
Ich wollte nun fragen, ob meine Kommentare richtig sind und ob es noch verbesserungsvorschläge gibt.
So langsam bekomme ich gefallen an Python.
