Metodo Montecarlo
I Metodi Monte Carlo sono un'ampia classe di metodi computazionali basati sul campionamento casuale per ottenere risultati numerici.
Sfruttando uno di questi metodi è possibile generare, con dei numeri casuali, il valore del PI_Greco.
Per calolare il PI_GRECO con il metodo Monte Carlo partiamo dalle seguenti ipotesi:
Sia M un punto di coordinate (x,y) con 0
Se x^{2}+y^{2}<1 allora il punto M appartiene al settore di disco (un quarto del cerchio a cui appartiene) di centro (0,0) di raggio 1.
Mentre se il punto è al di fuori del disco si avrà x^{2}+y^{2}>1
L'area di tale disco è il raggio elevato al quadrato per π diviso 4.
Nell'esempio il raggio è pari a uno e quindi l'area di interesse è 1*π/4 = π/4. Il punto può cadere quindi o nel cerchio o nel quadrato circoscritto al cerchio.
La probabilità che il punto cada all'interno del settore di disco è quindi pari al rapporto tra l'area del settore π/4 e l'area del quadrato circoscritto al settore di disco che è 1; quindi la probabilità è π/4.
Facendo il rapporto del numero dei punti che cadono nel settore di disco con il numero dei tiri effettuati si ottiene un'approssimazione del numero π/4 se il numero dei tiri è grande.
Programma in C per il calcolo del PI Greco con il metodo Monte Carlo
In questo programma utiliziamo la funzione
srand(time(NULL));
che genera il seme casuale e la funzione
rand();
che genera il numero casuale.
La funzione srand per poter essere utilizzata ha bisogno dell'inclusione della libreria , time.h; quest la libreria leggerà l'orologio del computer e quindi genererà numeri diversi ogni volta che verrà invocata.
Il metodo Monte Carlo permette di calcolare il numero PI_Greco con la seguente formula
Area_Cerchio/Area_Quadrato=(PI_Greco*raggio*raggio)/(2*raggio)^2= PI_Greco/4
Infatti l'area del cerchio è data dal quadrato del raggio per PI_Greco mentre l'area del quadrato, di lato uguale a due volte il raggio, è data da (2*raggio)^2; il rapporto di queste due aree dà quindi
PI_Greco/4
Facendo la formula inversa si ha che:
PI_Greco=4*(Area_Cerchio)/Area_Quadrato)
La funzione random(time(NULL)): quindi genera dei numeri casuali esterni alla circonferenza e interni al quadrato; se contiamo i punti generati fuori dal cerchio, ma interni al quadrato incrementiamo di uno il numero dei punti all'interno del ciclo for.
Questo avviene con l'istruzione
......
if(x*x+y*y<1) //cioè se il punto è dentro la circonferenza di raggio unitario
++dentro; // incrementa i punti che stanno dentro altrimenti non incrementare
......
dopo il ciclo for calcoliamo il valore di PI_Greco con la formula
PI_Greco=4*(double)dentro/(double)tanti;
Quando proviamo a lanciare questo programma il valore di PI_Greco è quasi uguale a quello voluto, ma naturalmente si avranno valori diversi per ogni lancio del programma, in quanto il metodo utilizzato è di tipo casuale, cioè random.
Programma completo del metodo Monte Carlo in Dev C
L'output del programma sarà il seguente
Calcoliamo il Pi greco con un foglio a quadretti
IL METODO MONTECARLO PER IL CALCOLO DEL Pi GRECO con un foglio a quadretti
Il metodo Monte Carlo è un metodo probabilistico che ci permette di calcolare il π. Consideriamo una circonferenza di raggio unitario r=1.
Essa avrà un’area pari a
Area del cerchio = r^2*π
Inscriviamo questa circonferenza in un quadrato di lato 2r ed area
Area del quadrato = 2r*2r=4r2
I punti all’interno del quadrato avranno coordinata x e y compresi tra 0 e 1, di questi, quelli che distano meno di 1 dal cerchio cioè quelli che hanno
x^2+y^2<1
si trovano dentro il cerchio, quelli che hanno coordinata
x^2+y^2>1
si trovano fuori dal cerchio e quelli che hanno
x^2+y^2=1
si trovano naturalmente dentro una circonferenza.
Adesso cercherò, attraverso un metodo casalingo, di dimostrare che
da cui ricaviamo che:
π=4* (Area del cerchio/ Area del quadrato)
Prendiamo un foglio di carta con quadretti di 5 mm. Con l’aiuto di un piatto disegniamo un cerchio e lo iscriviamo dentro un quadrato.
Adesso contiamo tutti i quadretti esterni alla circonferenza e che non toccano la circonferenza, e per comodità li indichiamo con un puntino.
In questo modo rispettiamo la regola che i quadretti sono equamente distribuiti sull’intero foglio. Successivamente contiamo tutti i quadretti che intercettano la circonferenza, e tutti i quadretti contenuti nel quadrato.
Ho ottenuto i seguenti valori sperimentali:
N° di punti sui quadretti esterni alla circonferenza = Ne
Ne = 106+111+104+104=425
N° di punti sui quadretti che intersecano la circonferenza=Nc
Nc = 140
N° quadretti totali=Ntot
Ntot = 48*48 = 2304
Punti dentro cerchio= Cmax
Cmax = Ntot-Ne = 2304 – 425=1879
Punti dentro il cerchio escludendo quelli sulla circonferenza= Cmin
Cmin = Ntot-Ne-Nc =2304 - 425 -140 = 1739
Quest’ultima operazione si rende necessaria perché alcuni punti si trovano a metà tra dentro la circonferenza e fuori la circonferenza.
Quindi faccio a media tra i due valori in modo da ottenere i quadretti che mediamente si trovano dentro il cerchio.
Cmedio = (Cmax+Cmin)/2= (1879+1739)/2=1809
Applichiamo adesso la formula per calcolare il :
π = 4*(Area del cerchio / Area del quadrato)
Al posto di Area del cerchio sostituiamo il valore medio dei quadretti che stanno nel cerchio cioè
Cmedio=1809
e al posto dell’area del quadrato inseriamo il numero dei quadretti totali che abbiamo ottenuto
Ntot =2304
Sostituendo abbiamo:
π = 4 * (Cmedio / Ntot)
π =4* (1809/2304 )=3,1406
Ѐ veramente sorprendente, che abbiamo ritrovato il valore del π utilizzando un metodo così semplice, senza l’utilizzo di alcun software. Naturalmente la precisione trovata si ferma solo alla seconda cifra, ma è comunque un buon risultato.