// 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