Stima numerica

La stima viene fatta confrontando l'area del quarto di cerchio di raggio $1$, $Area=\dfrac{\pi}{4}$ con il quadrato unitario

In [1]:
import random
import math
In [2]:
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)
3.13996

Grafica

Dati: Quadrato di lato $\ell = 2$

$Area_{quadrato} = 4$

$n$ numero di estrazioni

In [3]:
import matplotlib.pyplot as plt
import numpy as np
In [4]:
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}$

Velocità di convergenza

In [5]:
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()
In [ ]: