Python :: Aufgabe #71
5 Lösungen

Berechnen von Pi mit Zufallszahlen
Anfänger - Python
von eulerscheZhl
- 07.03.2015 um 07:58 Uhr
Man kann die Kreiszahl Pi näherungsweise bestimmen, indem man Zufallszahlen generiert:
Man stelle sich einen Kreis mit Mittelpunkt (0/0) und Radius 1 vor. Es werden zufällig Punkte erzeugt, bei denen sowohl x als auch y im Intervall [0;1[ liegen. Dann wird die Entfernung dieser Punkte zum Ursprung ermittelt. Ist diese Entfernung kleiner als 1, so liegt der Punkt innerhalb des Kreises.
Setzt man bei einer ausreichenden Zahl von Zufallspunkten die Zahl der Treffer in das richtigen Verhältnis zur Gesamtzahl der Punkte, so erhält man einen Näherungswert für Pi (Pi = 4 * AnzahlTreffer / AnzahlGesamt).
Schreibe ein Programm, das auf oben beschriebene Weise Pi berechnet.
Man stelle sich einen Kreis mit Mittelpunkt (0/0) und Radius 1 vor. Es werden zufällig Punkte erzeugt, bei denen sowohl x als auch y im Intervall [0;1[ liegen. Dann wird die Entfernung dieser Punkte zum Ursprung ermittelt. Ist diese Entfernung kleiner als 1, so liegt der Punkt innerhalb des Kreises.
Setzt man bei einer ausreichenden Zahl von Zufallspunkten die Zahl der Treffer in das richtigen Verhältnis zur Gesamtzahl der Punkte, so erhält man einen Näherungswert für Pi (Pi = 4 * AnzahlTreffer / AnzahlGesamt).
Schreibe ein Programm, das auf oben beschriebene Weise Pi berechnet.
Lösungen:

import random, math random.seed() treffer = 0 z = input("Anzahl Durchlaeufe: ") anzahl = int(z) for i in range(anzahl): x = random.random() y = random.random() z = math.sqrt(x**2 + y**2) if z < 1: treffer += 1 print("Pi in Naeherung bei", anzahl, "Durchlaeufen: ", 4*treffer/anzahl) print("Abweichung: " + str(round(100*abs(1-(4*treffer/anzahl)/math.pi),2)) + "%")

import math import random def PI(): anzahltreffer=0 k=0 a=0 while a<100000000: x=random.random() y=random.random() d=math.sqrt(x*x+y*y) if d<1: anzahltreffer =anzahltreffer+1 else: k = k +1 a = a+1 pi=4*(anzahltreffer+0.0)/(k+anzahltreffer) print pi PI()

zaehler = input("Mit wievielen Zufallszahlen soll versucht werden, pi zu finden?: ") counter_in = 0 for i in range(zaehler): r = random(2) if r[0]**2 + r[1]**2 < 1: counter_in += 1 else: pass pi = float(4*counter_in)/zaehler print pi
Mathematisch habe ich nur Bahnhof verstanden, die nötigen Formeln ergoogelt. Programmiertechnisch ist es eine nette Anfängeraufgabe, weil nicht wirklich anspruchsvoll.
Python-Code

# Python 2.7 # -*- coding: utf-8 -*- import random anzahl_versuche = input("Wieviele Punkte sollen gesetzt werden: ") punkte_im_kreis = 0 z = anzahl_versuche # weil´s dann länger dauert if anzahl_versuche >= 5000000: print "\nAnnaeherung an Pi wird berechnet..." while z > 0: x = random.random() y = random.random() if (x ** 2 + y ** 2) <= 1: punkte_im_kreis = punkte_im_kreis + 1 z = z - 1 print "\nERGEBNIS:\n" print "****************************************************" print "Annaeherung an Pi: " + str(punkte_im_kreis * 4.0 / anzahl_versuche) + " (Pi = 3.14159265...)" print "****************************************************" print str(anzahl_versuche) + " Zufallspunkte gesetzt" print str(punkte_im_kreis) + " Punkte innerhalb des Kreises (" + str(punkte_im_kreis*100/anzahl_versuche) + "%)"

#Berechnung von Pi from random import randint from math import pi,sqrt def kreis(): x=randint(1,99999)/100000 y=randint(1,99999)/100000 r=sqrt(x**2+y**2) if r<1: return True else: return False anzahl=1000 treffer=0 for i in range(1000): if kreis(): treffer+=1 Pi=4*treffer/anzahl print("Die berechnete Zahl für Pi ist:",Pi,"\n und die tatsächliche Zahl ist:",pi)