Informatica 5 Liceo Scientifico Scienze Applicate/Tecnica di Montecarlo

Wikibooks, manuali e libri di testo liberi.
Indice del libro

Questa pagina è uno stub Questo modulo è solo un abbozzo. Contribuisci a migliorarlo secondo le convenzioni di Wikibooks

Questa tecnica permette di calcolare l'area di una superficie in modo probabilistico. Consideriamo l'area che vogliamo calcolare: inscriviamo ora questa in un quadrato di lato (e dunque area) noto. Ora mettere all'opera la tecnica sarà come giocare a freccette: ne lancio un numero elevato in modo del tutto casuale, per poi contare quante di queste sono andate a segno nel bersaglio (area). Questa si calcola con la proporzione:

nlancifatti:areaquadrato=nlanciinterniadarea:areasuperficie.

Talvolta è conveniente inscrivere la superficie in un rettangolo di base ed altezza noti invece che inscriverla in un quadrato. La tecnica è efficace anche per la determinazione di un parametro, ad esempio pi greco. Per calcolarlo, pensiamo di avere un cerchio di area a noi sconosciuta inscritto in un quadrato di area 1. Il cerchio toccherà i lati del quadrato nei punti con ascissa o ordinata + o - 0.5. Di seguito il programma in octave per la soluzione del problema:

nlanci=100000;
l=1; %lato quadrato
conta=0;
for i=1:100000
 x=rand()-0.5; %rand va da 0 a 1, così da -0.5 a 0.5 per centrare il tutto
 y=rand()-0.5;
 if(x^2+y^2<=0.25) %tramite Pitagora
  conta=conta+1; %conto quante volte colpisco area
 end
end

areacerchio=conta/nlanci
pigreco=areacerchio/0.25

Possiamo anche utilizzare la tecnica di Montecarlo per il calcolo di un integrale. In questo caso, data la funzione da integrare ed esplicati gli estremi di integrazione bisognerà agire nel seguente modo:

  1. disegnare il grafico della funzione nell'intervalle [a,b] in un piano cartesiano;
  2. calcolare il massimo nell'intervallo;
  3. inscrivere la curva in un rettangolo tale che base=b-a e altezza=max;
  4. procedere con la tecnica di Montecarlo contando i punti al di sotto della curva.

Il codice in Octave per fare questo è:

f=inline('3*x^2+2*x+1')
max=feval(f,5) %il massimo nella parabola qua è 5
a=1,b=5;
arearett=(b-a)*max;
conta=0;
for i=1:100000
 x=4*rand()+1;
 y=max*rand();
 if(y<feval(f,x))
  conta=conta+1;
 end
end
area=arearett*conta/100000

Montecarlo