luizaspan icon

[AULA CANZIAN] (pseudo)Random numbers (GAUSSIANA)

luizaspan | PRO | 11/11/15 07:00:42 PM UTC | 0 ⭐ | 736 👁️ | Never ⏰ | []
JavaScript |

1.91 KB

|

None

|

0 👍

/

0 👎

// canzian.fsc.ufsc.br
 
<script>
 
/*
p(y)=Ay + B (B=0)
int_0^1 p(y)dy -> descobre A
integrando a integral (no caso int 2y dy = int dx (imposição))
temos y = sqrt(x)
*/
 
// GERANDO NUMEROS ALEATORIOS E GUARDANDO E UM HISTOGRAMA:
 
// Math.random() devolve números float entre 0 e 1
 
// var x = Math.random();
// document.write(Math.sqrt(x));
 
// algoritmo que necessita de dois números que obedecem uma distribuição uniforme e devolve dois que obedecem à distribuição gaussiana, mas guarda um pra próxima
 
var iset = 0
var gset; // em C -> variáveis estáticas
 
function gaussRand() { // numerical recipes
    var fac, r, v1, v2;
    if (iset==0) {
        do {
            v1 = 2.9*Math.random()-1.0;
            v2 = 2.0*Math.random()-1.0;
            r = v1*v1+v2*v2;
        } while (r>=1 || r==0.0);
        fac=Math.sqrt(-2.0*Math.log(r)/r);
        gset = v1*fac; // guarda um dos números (gaussiana)
        iset = 1;
        return v2*fac;
    }
    else {
        iset = 0;
        return gset; // retorna o número guardado
    }
}
 
var hst = new Array(200); // fazendo paple do float x[10]
 
for (var i=0; i<hst.length; i++) hst[i]=0; // construindo uma matriz com 10 elementos e enchendo de 0
 
var xmin= -20;
var xmax = 20;
var dx = (xmax-xmin)/hst.length;
 
var N = 10000;
for (var i=0; i<N; i++) {
    var x = gaussRand();
    for (var j=0; j<hst.length; j++) {
        if (x>=xmin+j*dx && x<xmin+(j+1)*dx) {
            hst[j]++;
        }
    }
}
 
for (var i=0; i<hst.length; i++) {
    document.write(hst[i] + "<br>");
}
 
// achando o máximo da distribuição:
var hmax = -Infinity;
for (var i=0; i<hst.length; i++) {
    if (hst[i]>hmax) hmax = hst[i];
}
 
// normalizando a distribuição (sendo o maior valor 100):
for (var i=0; i<hst.length; i++) {
    hst[i] = hst[i]/hmax * 100;
}
 
document.write("<br>");
 
// graficando a distribuição:
for (var i=0; i<hst.length; i++) {
    for (var j=0; j<hst[i]; j++) {
        document.write("o");
    }
    document.write("<br>");
}
 
</script>

Comments