Newsgroup: it.scienza.fisica
Titolo: problemi con metodo metropolis

Ciao a tutti!
Avrei qualche problemino con il metodo Metropolis per determinare una
sequenza di numeri casuali aventi distribuzione da me definita...
per esempio..l'esercizio di fisica computazionale è appunto scrivere
l'algoritmo di metropolis per determinare una sequenza di numeri
casuali con
distribuzione esponenziale, ovvero
w(x)=exp(-x^2)
l'algoritmo l'ho scritto senza problemi, pero voglio dire in che modo
posso
determinarne l'efficienza?? come potrei graficare la sequenza dei
valori di
x trovati?? so che l'algoritmo è accettabile se i punti accettati
sono
almeno 1/3 dei punti random generati, pero poi non so proprio come
"vedere"
quanto sono buoni questi numeri random...in una esercitazione si parla
di
graficarli in istogramma ma non riesco a capire come devo fare...
grazie a tutti!!
davide

Prima di rispondere qualche domanda,
Che generatore di numeri pseudo-casuali stai usando ?
Sarebbe interessante vedere la porzione di codice in cui applici
l'algoritmo di Metropolis.
Per determinare la bontà di un generatore esistono diversi test,
quello proposto nell' esercitazione consiste nel vedere con quale
frequenza (altezza dell'istogramma) un certo numero viene generato.
Una caratteristica fondamentale di un generatore è che i numeri che
vengono generati siano uniformemente distribuiti (tipicamente nell'
intervallo [0,1]) e che abbia un periodo molto grande.
Henry

 w(x)=exp(-x^2)
[cut]
Ciao Davide,
c'è un problema teorico. La funzione che stai usando si chiama
Gaussiana, affinchè rappresenti correttamente una distribuzione
di probabilità dovrebbe essere normalizzata in modo tale che
  /+oo	
  |    dx w(x) = 1
  /-oo
Nel tuo caso non lo è. Quindi la prima cosa da fare è dividere
la funzione w(x) per il suo integrale su tutto l'asse reale.
Lascio a te i conti.
Per valutare l'accuratezza dell'algoritmo puoi ad esempio
calcolare il valore d'aspettazione e la varianza ottenute
con esso e confrontarli con i valori esatti.
- Pistacchio

 davide
Ciao 


il generatore di numeri e' il ran1 del fortran 77 che genera numeri
compresi tra 0,1 a distr.uniforme.
non capisco fondamentalmente una cosa: io la sequenza degli xi la
genero con il metropolis; questa sequenza devo generarla ulteriormente
per esempio m volte??? perche per un certo N hai una lunghezza della
sequenza...se poi devo vedere quante volte un numero e' stato generato
dovrei  ripetere il tutto altre m volte....


Scusa ma non capisco..... :(
Un conto sono i numeri generati "casualmente" altra cosa è il criterio
con il quale accetti o meno un risultato con l'algoritmo di Metropolis
(come detto prima, sarebbe interessante vedere il codice o anche lo
pseudo codice sul quale stai lavorando).
Nota sul generatore di numeri pseudo casuali:
Fai molta attenzione al generatore che usi, nel caso in esame
probabilmente la casualità dei numeri generati *forse* non è così
critica, ma se in futuro dovrai affrontare problemi più articolati
sappi che dovrai controllare accuratamente il generatore. Come ti
dicevo nel mio precedente post esistono alcuni test per controllare
l'efficacia dei generatori, tra questi il test di Kolmogorov-Smirnov e
un test "spettrale" che tu stesso puoi provare, potrai osservare che
alcuni dei più "famosi" generatori di numeri casuali, non sono poi
così casuali. Tra questi il generatore del fortran, quello di Matlab,
Mathematica e Derive sono da evitare per simulazioni "serie". Ad oggi
che io sappia uno dei migliori generatori (presenti anche in sorgente
per Fortran) è il Mersenne Twister di cui ti lascio il link...... Buon
divertimento :)
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/FORTRAN/fortran.html
Ciao
Henry