Moneta di Buffon

Vedi la discussione

import random

N=5000 # numero lanci
R=1/8  # raggio della moneta

def controllo(x,y,R):
    if(abs(x) >= 1/2-R) or (abs(y) >= 1/2-R):
        return 1
    else:
        return 0

n=0
for lanci in range(0,N):
    x=random.uniform(-1/2,+1/2)
    y=random.uniform(-1/2,+1/2)

    n += controllo(x,y,R)

P=4*R-4*R**2
p=n/N
print("R=%.4f, N=%d, n=%d, p=%.4f, P=%.4f" %(R,N,n,p,P))

matplotlib

import matplotlib.pyplot as plt
import random

N=5000 # numero lanci
R=1/8  # raggio della moneta

def controllo(x,y):
    if(abs(x) < 1/2-R) and (abs(y) < 1/2-R):
        return 1
    else:
        return 0

n=0 # frequenza assoluta

xp=[]
yp=[]
xP=[]
yP=[]

for lanci in range(N):
    x=random.uniform(-1/2,+1/2)
    y=ra ndom.uniform(-1/2,+1/2)
    if controllo(x,y):
        n += 1
        xp.append(x) # dentro
        yp.append(y)
    else:
        xP.append(x) # sul bordo
        yP.append(y)

P=4*R-4*R**2
p=n/N
print("R=%.4f, N=%d, n=%d, p=%.4f, P=%.4f" %(R,N,n,p,P))

plt.axis("equal")
plt.grid(which="major")
plt.scatter(xp, yp, color="green", marker ="." ) # dentro
plt.scatter(xP, yP, color="red"  , marker ="." ) # sul bordo
plt.title("Moneta di Buffon, R = %.3f" %R)

plt.show()