Informatica 5 Liceo Scientifico Scienze Applicate/Tecnica di Montecarlo
Questo modulo necessita di essere "wikificato", ovvero formattato secondo gli standard di Wikibooks.
Collabora anche tu a rendere questo modulo conforme alle linee guida e poi rimuovi questo avviso. |
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:
- disegnare il grafico della funzione nell'intervalle [a,b] in un piano cartesiano;
- calcolare il massimo nell'intervallo;
- inscrivere la curva in un rettangolo tale che base=b-a e altezza=max;
- 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