Il sottoprogramma sottostante mette in U la somma Σi Ui di 24 variabili casuali (numeriche) indipendenti U1, U24. Mediante un programma possiamo studiare la legge di distribuzione di U sperimentalmente. | ||||
U = 0 FOR j=1 TO 7 U = U+RND NEXT FOR j=1 TO 8 U = U+RND*RND NEXT FOR j=1 TO 6 U = U+SQR(RND) NEXT FOR j=1 TO 3 U = U+SIN(RND*3) NEXT | All'aumentare delle prove (100, 200, 400, 800, 1600, , 12800) si vede come l'istogramma sperimentale tende a stabilizzarsi su un andamento approssimativamente gaussiano: la legge di distribuzione di U è approssimabile con la legge gaussiana. All'aumentare del numero delle variabili Ui (comunque siano distribuite, a patto che non ve ne sia una che "prevarica le altre" - condizione qui descritta intuitivamente ma che può essere precisata tecnicamente [condizione "di Lindeberg"]) questa approssimazione migliora. |
Per approfondimenti vedi mathworld subject limit theorems in www.wolframalpha.com.
Come ottenere l'animazione precedente con R:
tic = function(x) {sec=proc.time()[3]; while(proc.time()[3] < sec+x) sec=sec} dat = function(N) {x = NULL; for (i in 1:N) {x[i] = 0; for (j in 1:7) x[i] = x[i]+runif(1); for (j in 1:8) x[i] = x[i]+runif(1)*runif(1); for (j in 1:6) x[i] = x[i]+sqrt(runif(1)); for (j in 1:3) x[i] = x[i]+sin(runif(1)*3) };x} H = function(n) {hist(dat(n), probability=TRUE, col=co,main=""); mtext(n)} n = 4; co="green" for(i in 1:10) {H(n); tic(1); n = n*2} co="cyan"; H(n); mtext("n =",at=9) z = function(x) dnorm(x, mean=mean(d), sd=sd(d) ); curve(z,add=TRUE,lwd=2)