La stima viene fatta confrontando l'area del quarto di cerchio di raggio $1$, $Area=\dfrac{\pi}{4}$ con il quadrato unitario
import random
import math
n = 100000
conta = 0
for k in range(0,n):
x = random.random()
y = random.random()
d = math.sqrt(x**2+y**2)
if d <= 1:
conta += 1
#si moltiplica per 4 quarto di cerchio
print(4*conta/n)
Dati: Quadrato di lato $\ell = 2$
$Area_{quadrato} = 4$
$n$ numero di estrazioni
import matplotlib.pyplot as plt
import numpy as np
def mappaPi(n):
conta = 0
puntoX = []
puntoY = []
ilcolore = []
dentro = 'r.'
fuori = 'b.'
for k in range(0,n):
x = random.random()*2-1
y = random.random()*2-1
puntoX.append(x)
puntoY.append(y)
d = math.sqrt(x**2+y**2)
if d <= 1:
conta += 1
ilcolore.append(dentro)
else:
ilcolore.append(fuori)
puntoX = np.array(puntoX, dtype=np.float64)
puntoY = np.array(puntoY, dtype=np.float64)
return puntoX, puntoY, ilcolore
figura, riquadro = plt.subplots(2, 2, figsize=(10, 10))
m = 500
puntoX1, puntoY1, ilcolore1 = mappaPi(m)
for k in range(0,m):
riquadro[0,0].plot(puntoX1[k], puntoY1[k], ilcolore1[k])
stringa = 'numero punti '+str(m)
riquadro[0,0].title.set_text(stringa)
m = 1000
puntoX2, puntoY2, ilcolore2 = mappaPi(m)
for k in range(0,m):
riquadro[0,1].plot(puntoX2[k], puntoY2[k], ilcolore2[k])
stringa = 'numero punti '+str(m)
riquadro[0,1].title.set_text(stringa)
m = 4000
puntoX3, puntoY3, ilcolore3 = mappaPi(m)
for k in range(0,m):
riquadro[1,0].plot(puntoX3[k], puntoY3[k], ilcolore3[k])
stringa = 'numero punti '+str(m)
riquadro[1,0].title.set_text(stringa)
m = 8000
puntoX4, puntoY4, ilcolore4 = mappaPi(m)
for k in range(0,m):
riquadro[1,1].plot(puntoX4[k], puntoY4[k], ilcolore4[k])
stringa = 'numero punti '+str(m)
riquadro[1,1].title.set_text(stringa)
plt.show()
$\dfrac{n_{rossi}}{n_{totale}}=\dfrac{Area_{cerchio}}{Area_{quadrato}}=\dfrac{\pi}{4}$
n = 100000
passo = 250
passi = []
stima = []
passi.append(0)
stima.append(0)
for h in range(passo,n,passo):
conta = 0
for k in range(0,h):
x = random.random()
y = random.random()
d = math.sqrt(x**2+y**2)
if d <= 1:
conta += 1
pg = 4*conta/k
passi.append(k)
stima.append(pg)
passi = np.array(passi,dtype=np.int64)
stima = np.array(stima,dtype=np.float64)
pigreco = math.pi
plt.figure(figsize=(10,10))
plt.xlim([0,n+100])
plt.ylim([2.8,3.4])
plt.plot(passi, stima, 'b-')
plt.axhline(y=pigreco,color='gray')
plt.show()